在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);
那么一切都很好。
如果
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)
}