【发布时间】:2017-08-12 04:01:33
【问题描述】:
我正在使用 Q Promise 库在 Node.js 应用程序中工作。我有两组承诺链,一组用于控制流程,另一组用于调用我从中检索数据的服务方法,我的问题是,我需要将承诺链的返回值获取到我的另一个承诺链。
MyExample.js
bookService.getBookById(bookId)
.then(bookDetals)
.then(function(returnValue) { // <- (A)
res.send(200, returnValue); // <- (C)
return returnValue;
}).catch(function(error) {
logger.error('Error getting values');
res.send(500, error);
});
bookDetals = function(book) {
myService.retrieveATypeData(book, bookId)
.then(function(bookData) {
myService.retrieveBTypeData(bookId)
.then(function(bdata) {
bookData[bTypeData] = bdata;
myService.retrieveCTypeData(bookId)
.then(function(cdata) {
bookData[cTypeData] = cdata;
}).done(function() {
return bookData; // <- (B)
})
});
});
};
在上面的代码中,我调用了 bookService.getBookById(bookId) 并获取了这本书。然后我调用 bookDetals 函数,它是一个承诺链。但我的问题是它在承诺链结束之前返回 returnValue 。如何让 Promise 链的返回值(在 (B) 行)返回原地 (C)。目前它之前返回。所以在地方 C 它说未定义。
【问题讨论】:
-
您的
bookDetals函数(以及其中的所有回调函数)缺少return语句 - 如果不返回承诺,then怎么能等待它?! -
哦,不要使用
done- 你只需要then。
标签: javascript node.js promise q