管道异步函数
对于异步函数执行从左到右的函数组合。
- 使用
Array.prototype.reduce()
和展开运算符(...
)使用Promise.prototype.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 (一秒后)
})();