У меня есть функция (buildMetaData
), которая выполняет следующие действия:
1. It receives an array(`items`) as a param
2. It invokes an DAO to fetch some data from a downstream service.
3. The downstream service responds with a promise (initial promise).
4. In the "then"(resolving initial promise), I need to modify the array passed in the param and return the modified array.
На шаге 4 я отображаю массив items
, изменяя элемент массива, и мне нужно вызвать другую функцию, котораявозвращает массив обещаний.Мне нужно разрешить это обещание, чтобы установить элемент массива.Как мне связать этот массив обещаний с первоначальным обещанием?
buildMetaData(items) {
return checkoutDAO.get(items[0].id)
.then((order) => {
return items.map((item) => {
let res = {};
// some processing
const promises = this.buildItemMeta({itemType: item.type, itemId: item.id})
promises.spread((product, media) => {
res.size = this.getItemSize(product, media);
});
return res;
});
});
}
buildItemMeta({itemType, itemId}) {
const promises = [
productDAO.get(itemType), // this is a promise
];
promises.push(mediaDAO.get(itemId`)); // this is a promise
return Promise.all(promises);
}
Я хочу, чтобы новый новый массив имел свойство res.size
, которое должно быть разрешено, но на самом деле обещание. Все создают новый экземпляр обещания, а не связывают его с первоначальным обещанием.
ps этот проект использует continuation local storage
(cls), cls имеет некоторые известные проблемы с async / await, поэтому я не могу использовать async / await для решения этой проблемы.
Пожалуйста, дайте мне знать, если это требует дальнейшего объяснения,Я ценю любые попытки ответить на этот вопрос.