从数组调用异步函数

问题描述

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

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

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

解决方法

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

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

如果没有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可以是静态值,也可以是通过函数参数传递的值。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...