如何在Typescript中等待for循环的结果?



我在typescript中有一个for循环。循环返回的结果将用作另一个方法的参数。无论我如何尝试,我的代码总是在循环结束之前返回一个结果。如何设置足够长的等待时间,以便在循环结束后获得返回结果?或任何其他的解决方案将不胜感激。

private async findMainItemId() {
let mainItem = {id: 1, price: 0};
mainItem.id = this.itemIds[0];

for (let i = 0; i <= this.itemIds.length; i ++)
{      
this.checkoutService.getShippingFees(this.itemIds[i]).subscribe((resp: IDeliveryType[]) => {
let itemDeliveryTypes = resp.filter(s => s.applied === true);
let standardPrice = itemDeliveryTypes.find(dt => dt.name === 'standard').price;

if ( standardPrice > mainItem.price) 
{
mainItem.id = this.itemIds[i].id;
mainItem.price = standardPrice;
};  
})
} 
return mainItem.id;
}

如果subscribe没有返回Promise,您可以手动将回调封装在Promise构造函数中,以便您可以await它。

private async findMainItemId() {
const mainItem = {id: 1, price: 0};
mainItem.id = this.itemIds[0];

for (const item of this.itemIds) {
await new Promise(resolve =>
this.checkoutService.getShippingFees(item).subscribe((resp: IDeliveryType[]) => {
const itemDeliveryTypes = resp.filter(s => s.applied);
const standardPrice = itemDeliveryTypes.find(dt => dt.name === 'standard').price;

if (standardPrice > mainItem.price) {
mainItem.id = item.id;
mainItem.price = standardPrice;
};
resolve();
})
);
} 
return mainItem.id;
}  

最新更新