Я работаю в приложении Node.js с библиотекой обещаний Q. У меня есть два набора цепочек обещаний: один для управления потоком, а другой для вызова методов службы, из которых я извлекаю данные. Мой вопрос в том, что мне нужно получить возвращаемое значение цепочки обещаний для моей другой цепочки обещаний.
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 до того, как цепочка промисов завершится. Как я могу получить возвращаемое значение цепочки обещаний (в строке (B)) для возврата на место (C). В настоящее время он возвращается раньше. поэтому на месте C написано undefined.
bookDetals
(и во всех функциях обратного вызова внутри нее) отсутствует операторreturn
— без возврата обещания, какthen
может его ждать?! - person Bergi   schedule 20.03.2017done
— вам нужен толькоthen
. - person Bergi   schedule 20.03.2017