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