Typescript - 在异步函数数组中循环

问题描述 投票:0回答:1

在nodejs/nest => 我有一个由键定义的函数对象。 但是当我循环这些函数时,异步行为就被破坏了。 知道为什么从

serializationByService
调用的函数没有相同的行为吗?

const keys = [key1, key2]
const serializationByService: Record<string, Promise<returnFromFunc1 | returnFromFunc2>> = {
      key1: this.Func1(data),
      key2: this.Func2(data)
}
for (const key of keys) {
    const serviceData = await serializationByService[key];
    console.log(serviceData)
    ... other actions 
}

但是当我在其中循环时,日志会在调用的函数返回之前执行。 如果我用

await serializationByService[key];
替换
await this.Func1(data);
那么一切都很好。

node.js typescript asynchronous
1个回答
0
投票

如果

this.Func1(data)
返回一个承诺,那么构建你的数据结构如下:

const serializationByService: Record<string, Promise<returnFromFunc1 | returnFromFunc2>> = {
      key1: this.Func1(data),
      key2: this.Func2(data)
}

只会创建一个对象,其中每个键都包含一个承诺。称呼这个:

await serializationByService[key];

不会等待对象属性中的那些承诺。

await
只是这样不行。因此,如果您想要对象中实际的 Promise 解析值,那么这就是为什么您必须将
await
放入对象定义中,正如您所发现的:

const serializationByService: Record<string, Promise<returnFromFunc1 | returnFromFunc2>> = {
      key1: await this.Func1(data),
      key2: await this.Func2(data)
}
© www.soinside.com 2019 - 2024. All rights reserved.