В моем коде есть определенная цепочка обещаний, которая выглядит следующим образом:
myPromise()
.then(getStuffFromDb)
.then(manipulateResultSet)
.then(manipulateWithAsync)
.then(returnStuffToCaller)
Теперь, в моем манипулируем WithAsync Я пытаюсь улучшить свой набор результатов, снова вызывая БД, но он не работает, как я ожидал, так как во время отладки я выяснил, что управление переходит к следующей функции returnStuffToCaller
Вот идея того, что входит в мою манипулировать с помощью функции :
function manipulateWithAsync(rs) {
return rs.map( async function whoCares(singleRecord) {
let smthUseful = await getMoreData(singleRecord.someField);
singleRecord.enhancedField = smthUseful;
return singleRecord;
})
}
Я понимаю смысл этого поведения: функция карты работает должным образом, и цепочка обещаний не дает понять, как это происходит, поскольку она не работает с ожидающими.
Есть ли способ, позволяющий моей returnStuffToCaller функции ждать, пока асинхронная функция выполнит свою работу?
Я также использую bluebird и пытался использовать coo-рутину, поэтому, если вы решите, что это хорошее решение, я опубликую свой неудачный код для bluebird coo-рутины:)
Спасибо!