我正在学习javascript和Node.js,并遇到了这段代码。我有一个user.js代表用户架构,而server.js包含我的发布路线。
UserSchema.methods.generateAuthToken = function() {
return user.save().then(()=> { //Return Statement 2
return token; //Return Statement 3
});
};
我想了解调用user.save()时两个return语句的含义,然后在'then'中返回一个令牌。为什么我们需要在“ user.save()”之前先“返回”
这是“开机自检路线”
user.save().then(()=>{
return user.generateAuthToken(); //Return Statement 1
}).then((token) =>{
res.header('x-auth', token).send(user);
})
为什么我们返回'user.generateAuthToken()'而不是仅仅调用它?我们为什么要使用三个return语句,而根据我的理解,不需要返回语句,因为promises会自动在'then'块中返回某些内容。 有人可以在这里解释流程吗?我会非常感谢你。 谢谢。
答案 0 :(得分:0)
您我的朋友正在与Promises合作。 (第一个代码) 您打电话的时候 user.save() 您正在返回一个Promise。该函数可能成功也可能不会成功结束。Promise具有一个 然后承诺原型 function ..第一个arg是一个成功函数,当函数解析时(实项)
在第二个代码中..在第一个函数中,您返回了另一个Promise(整个然后返回了另一个Promise ..,但仅在它解析时)
如果您需要摆脱JavaScript的麻烦,请尝试使用Eloquent JavaScript(由Marijn Haverbecke撰写)
答案 1 :(得分:0)
为什么我们需要在“ user.save()”之前“返回”
这将返回解析令牌的承诺。没有返回,我们将无法访问save
函数外部的令牌。
为什么我们返回'user.generateAuthToken()'而不是仅仅调用它?
同样,我们需要令牌。如果仅调用该函数,则会执行保存操作,但是当Promise解析时我们没有令牌(在这种情况下,它用于响应的标头)。
为什么我们要使用三个return语句,而根据我的理解,因为Promise会自动在'then'块中返回内容,所以不需要return语句。
您的理解是错误的。 then
将从诺言返回的任何内容都可用,如果什么都没有返回,则没有参数(在这种情况下为令牌)。
答案 2 :(得分:0)
在第一个函数中,user.save()
将返回一个promise,当您在then
的{{1}}块中返回令牌时,promise将解析令牌的值。
在第二个函数中,如果您未使用user.save()
之前的return,它将仅执行该函数,然后您将在then块中获得user.generateAuthToken();
的结果。