2019-03-29
描述
为输入的异步函数进行从左到右的依次执行。
提示
- 对接受的函数参数使用扩展运算符后便可用
Array.prototype.reduce()
来执行从左到右的函数组合。 - 为接受的异步函数使用
Promise.then()
。 - 接受的函数参数可以返回以下组合:简单值,
Promise
,或者定义为async
函数且通过await
返回的异步值。所有函数必须是一元的。
代码
const pipeAsyncFunctions = (...fns) => arg => fns.reduce((p, f) => p.then(f), Promise.resolve(arg));
示例
对参数进行多次异步计算:
const sum = pipeAsyncFunctions(
x => x + 1,
x => new Promise(resolve => setTimeout(() => resolve(x + 2), 1000)),
x => x + 3,
async x => (await x) + 4
);
(async () => {
console.log(await sum(5)); // 15 (after one second)
})();