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

Typescript - loop inside a array of async functions

提问人:Sylvain.L 提问时间:10/25/2023 最后编辑:jfriend00Sylvain.L 更新时间:10/26/2023 访问量:32

问:

在 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);

节点.js 类型脚本 异步

评论


答:

0赞 jfriend00 10/26/2023 #1

如果返回一个 promise,则像这样构建数据结构:this.Func1(data)

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

将只创建一个对象,其中每个键都包含一个 promise,因为这就是返回的内容。然后这样做:this.Func1(data)

await serializationByService[key];

不会等待对象内部属性中的那些承诺。 只是不是那样工作的。因此,如果您希望在对象中使用实际的 promise 解析值,那么这就是为什么您必须将 放在对象定义中才能获得已解析的值,正如您发现的那样:awaitawait

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