从异步函数内部的回调中返回promise

时间:2017-05-01 13:50:18

标签: javascript typescript

下面是我用来从异步函数内部返回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程序员,所以我想知道是否有更好的模式来创建这个函数。

1 个答案:

答案 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的函数数组,并且每个函数都需要并行调用。