У меня есть следующая функция:
installationService.getInstallationMail = (id) => {
return cloudant.readDocument(dbInstallations, id)
.then(installation => {
return installation.supportMail;
});
};
Тогда у меня есть функция, в которой у меня есть следующий цикл forEach:
properties.forEach(item => {
if ((item.value > 0) && ((dateNow - item.value) > dateOneDay)) {
let index = item._id.lastIndexOf("_");
let result = item._id.substr(0, index);
item["baseId"] = result;
let email = installationService.getInstallationMail(item.baseId);
item["supportMail"] = email;
notifications.push(item);
}
});
console.log(notifications);
console.log для уведомлений возвращает меня:
[ { _id: 'id_9oW9i8M9RU_CbT1mKOGPG',
_rev: '26129-6dd842ab825bf291d876486b8157b07b',
control: false,
dataType: 1,
maxValue: '100',
measurable: true,
minValue: '0',
parentId: 'id_9oW9i8M9RU_eFyeP6BmdI',
precision: 2,
propertyType: 7,
value: '1522907022112',
baseId: 'id_9oW9i8M9RU',
supportMail: Promise { <pending> } } ]
Теперь у меня вопрос, как я могу вставить элементы (включая электронную почту) в цикл forEach, когда Обещанное разрешено?
Я попробовал это с
Promise.all(email).then(item => {
item["supportMail"] = email;
notifications.push(item);
});
вместо этого, но это также не сработало.
Здесь важно то, что я хочу получить доступ к notifications
вне цикла forEach
. Если я изменю forEach
на асинхронную функцию, console.log для notifications
будет запущен перед циклом.
Это весь JavaScript для справки: https://jsbin.com/gujiwatati/edit?js