最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

ES6替代async.seq流量控制

IT培训 admin 3浏览 0评论

ES6替代async.seq流量控制

使用NodeJS,我之前使用过async.seq(它允许每个传入的函数使用前一个函数的返回值)。例如,如果我有一个函数数组,我想将一个值传递给第一个,然后是第二个,直到我得到最终结果。

现在异步/等待和生成器可用,我一直试图找到是否有本机解决方案,但我没有看到任何东西。

有没有办法通过一系列函数本地传递参数,或者最简单的方法仍然是使用async包。

注意,在我的特定用例中,每个函数都返回一个promise。

回答如下:

我通常在处理Promises时使用Array.prototype.reduce

const addOne = number => {
  console.log(number);
  return Promise.resolve(number + 1);
};

const sequence = [addOne, addOne];

sequence.reduce((previous, current) => previous.then(current), Promise.resolve(0))
  .then(finalValue => console.log(finalValue)); // 2

我们从最初的Promise.resolve(initialValue)开始,并在解析前一个promise后调用当前的promise。

如果你喜欢async / await你可以用for循环来做,但我觉得减少更优雅

async function runSequence (initialValue) {
  let input = initialValue
  for (var i = 0; i < sequence.length; i++) {
    input = await sequence[i](input)
  }
  return input
}

runSequence(0)
  .then(finalValue => console.log(finalValue)); // 2

ES6替代async.seq流量控制

使用NodeJS,我之前使用过async.seq(它允许每个传入的函数使用前一个函数的返回值)。例如,如果我有一个函数数组,我想将一个值传递给第一个,然后是第二个,直到我得到最终结果。

现在异步/等待和生成器可用,我一直试图找到是否有本机解决方案,但我没有看到任何东西。

有没有办法通过一系列函数本地传递参数,或者最简单的方法仍然是使用async包。

注意,在我的特定用例中,每个函数都返回一个promise。

回答如下:

我通常在处理Promises时使用Array.prototype.reduce

const addOne = number => {
  console.log(number);
  return Promise.resolve(number + 1);
};

const sequence = [addOne, addOne];

sequence.reduce((previous, current) => previous.then(current), Promise.resolve(0))
  .then(finalValue => console.log(finalValue)); // 2

我们从最初的Promise.resolve(initialValue)开始,并在解析前一个promise后调用当前的promise。

如果你喜欢async / await你可以用for循环来做,但我觉得减少更优雅

async function runSequence (initialValue) {
  let input = initialValue
  for (var i = 0; i < sequence.length; i++) {
    input = await sequence[i](input)
  }
  return input
}

runSequence(0)
  .then(finalValue => console.log(finalValue)); // 2

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论