我不知道為什么控制臺日志中的變數結果在此行中更新之前回傳狀態
result[msisdn] = "customer exist"
它執行的代碼本身,但為什么在修改之前一直回傳狀態,我想我已經在我撰寫的所有異步代碼上提供了 await 關鍵字

代碼.ts
async migrateCustomerImageUseCase(request: ListCustomerForMigration, response: Response): Promise<any>{
const result = {} as any
const lists = request as any
await lists.forEach( async (element: any[]) => {
const msisdn = element[0] as string
const isCustomerExist = await this.ekycHandler.isCustomerExist(msisdn)
if(isCustomerExist){
result[msisdn] = "customer exist" as string
this.logger.info(`${msisdn} = ${result[msisdn]}`);
// tslint:disable-next-line:no-console
// console.log(result[msisdn])
// const customerImageData:CustomerImageData = {
// customerIdCardImage: element[2],
// customerImage: element[3],
// msisdn: element[0] as string
// };
// const localFileName = await this.uploadBase64ImageToLocalUseCase(customerImageData, response)
// const ossFileName = await this.uploadImageToOssUseCase(localFileName, response)
// ossFileName["customerId"] = isCustomerExist.id
// await this.ekycPortalRepo.createOrUpdateCustomerDetailCifFromMigrationData(ossFileName)
} else {
result[msisdn] = "customer not exist" as string
this.logger.info(`${msisdn} = ${result[msisdn]}`);
}
})
return result
}
并且 code.ts 在另一個異步函式中用這一行呼叫
const migrateResult = await this.ekycPortalUseCase.migrateCustomerImageUseCase(listCustomers, response)
uj5u.com熱心網友回復:
我認為你的情況主要與此有關 -在 forEach 回圈中使用 async/await
您確實不能使用 forEach。每個異步回呼函式呼叫都會回傳一個承諾,但您將它們扔掉而不是等待它們。只需使用 map 代替,您就可以等待使用 Promise.all 獲得的一系列承諾
你應該做這樣的事情:
const promises = lists.map(() => {
return (async () => {
const msisdn = element[0] as string
const isCustomerExist = await this.ekycHandler.isCustomerExist(msisdn)
if(isCustomerExist){
result[msisdn] = "customer exist" as string
this.logger.info(`${msisdn} = ${result[msisdn]}`);
} else {
result[msisdn] = "customer not exist" as string
this.logger.info(`${msisdn} = ${result[msisdn]}`);
}
})()
})
await Promise.all(promises)
uj5u.com熱心網友回復:
TypescriptforEach在繼續之前不會等待 a完全完成,這就是為什么return result陳述句在填充回圈內部的結果之前被執行的原因。
一種解決方案可能是從使用更改forEach為基本的 for 回圈,以完全避免此問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/366082.html
