承诺与承诺分开
我不太熟悉承诺。 我希望隐藏诺言 - 诺言的实现。
例:
function findFriends(req, res) {
const promiseFriend = MyFriendes.find({}).exec(); //call promise
if(friends.length===0){
logger.warn('No friendsavailible');
}else if(friends === undefined){
res.status(500).json({
error: 'INTERNAL ERROR'
});
}else{
res.status(200).json({
friends: friends
});
}
}
我会在相同的文件中解决我的承诺,但不是在同一个功能,我称之为承诺。
promiseFriend
.then(function(friends){
return friends;
})
.catch(function(err){
logger.error({error:err});
});
现在,我明白了,“promiseFriend”是未定义的。 我怎样才能将promise-call与promise-resolution分离开来?
如果你想在一个函数中定义一个承诺并在其他地方使用它,那么首先你需要从该函数中返回承诺,这是你在代码中没有做的。 然后你需要实际调用你也没有做的功能。 最后,你需要使用then
回调的返回值,你是不是在这种情况下这样做,以及。
将promise限制在本函数范围内的本地变量promiseFriend
中是毫无意义的。 还有没有点返回你的一个值then
回调: .then(function (friends) { return friends; })
-我不知道你有什么想在这里做。
我想findFriends
应该是Express的路由处理程序。 如果是这样,那么请确保您在每种情况下都发送一个响应(您对friends.length===0
不这样做)。 此外,如果您想在解决问题时采取行动,则需要实际添加一个then
处理程序。 现在你甚至没有friends
在你的功能中定义。 还要添加一个catch
处理程序,并为这种情况发送响应。
那么你可能会从你的函数中返回承诺,但如果它是一个路由处理程序,那么它就没有意义了。 您可以从函数返回一个承诺:
function x() {
return MyFriendes.find({}).exec();
}
然后使用它:
x().then(friends => ...).catch(error => ...);
但如果不返回它,则不能使用返回值,不能像定义的那样使用未定义的变量,并且实际上需要考虑返回值的返回值。
我建议你学习Node是如何工作的,因为你似乎已经复制并粘贴了一些随机代码,并将它们结合在一起,期望它能够实现你想要的,而不需要真正理解它。
为了更好地理解在此给出执行顺序的Node的异步特性,请参阅以下答案:
在理解函数调用,返回值,回调的概念之前,不要试图编写Node程序,在这种情况下,承诺。
链接地址: http://www.djcxy.com/p/55347.html上一篇: promise call separate from promise
下一篇: Should I refrain from handling Promise rejection asynchronously?