从数组调用异步函数

时间:2020-08-10 18:56:30

标签: javascript asynchronous promise

PromisesInSeries函数,该函数采用一组异步函数,并依次调用(下一个在上一个函数完成时开始),并将调用前一个函数的结果作为参数传递

function promisesInSeries(asyncFns) {
    let result;
    return new Promise((resolve, reject) => {
        for(const fn of asyncFns){
            resolve(fn)
            .then(data => fn(data))
        }
    })
}

我只得到第一个函数的结果。如何从数组调用所有函数,并因此返回最后一个值?

2 个答案:

答案 0 :(得分:0)

如果您可以使用async-await,这会更简单:

async function promisesInSeries(asyncFns) {
    let result;
    for (const fn of asyncFns) {
      result = await fn(result);
    }
}

答案 1 :(得分:0)

如果没有async / await,则可以reduce fns数组:

function promisesInSeries(fns) {
  return fns.reduce((promise, fn) => promise.then(fn), Promise.resolve());
}

第一个fn将收到值undefined,然后将每个返回值传递给下一个函数。

如果要具有一些初始值,可以通过将Promise.resolve()更改为Promise.resolve(initialData)来提供。 initialData可以是静态值,也可以是通过函数参数传递的值。