下面是我用来从异步函数内部返回promise的模式:
async call(id: string, inputs: Array<string>): Promise<any> {
return new Promise(async (resolve, reject) => {
await this.loadCache();
async.each(inputs, async (k, c) => {
try {
c(); // Do something here
} catch (error) {
reject();
}
}, async e => {
await this.callInternal(id);
resolve();
});
});
}
正如您所看到的,我在promise构造函数中使用await调用了几个Promise返回函数。我不是一个很棒的Javascript / Typescript程序员,所以我想知道是否有更好的模式来创建这个函数。
答案 0 :(得分:1)
这似乎与你正在做的相似:
async call(id: string, inputs: Array<string>): Promise<void> {
await this.loadCache();
await Promise.all(inputs.map(input => input())); // see below
await this.callInternal(id);
}
async
函数已经返回一个promise,因此您不需要用新的承诺包装call
的内容。
我不清楚async.each()
在您的示例代码中正在做什么:它正在调用c
,这是异步迭代器回调,但我假设您要调用k
。
看起来这个函数是同步的,否则你会传递一个回调,或者你已经使用await
作为前缀。
我猜测inputs
是一个返回promises的函数数组,并且每个函数都需要并行调用。