Поскольку наблюдаемое генерирует события асинхронно, ваш цикл forEach
завершится до того, как будет выполнен любой обратный вызов .subscribe
.
Вы можете решить эту проблему, превратив наблюдаемое в обещание, и await
этоЧтобы await
работал, вам нужна функция async
, поэтому сверните ваш код в такую функцию и замените цикл forEach
на цикл for
:
(async () => { // Async wrapper
for (const elem of res.docs) { // Use for-loop
console.log('elem');
if (elem.productType) {
// Convert observable to promise, and await
const result = await this.Service.function(elem.productType._id).toPromise();
console.log('if');
const text = result.name;
this.marketPlaceList.push(text);
} else {
console.log('else');
this.marketPlaceList.push('');
}
}
)(); // execute immediately
Обязательнотакже дождитесь самой внешней функции async
(или используйте на ней then
), когда вам нужно заполнить массив this.marketPlaceList
.