pipeAsyncFunctions
时间:2022-07-24
本文章向大家介绍pipeAsyncFunctions,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
以从左向右
的顺序组合异步函数
并依次执行他们。
使用两层高阶函数
。
第一层高阶函数
用于在闭包
中保存需要执行的异步函数
数组(异步函数
作为参数传入,并通过数组展开操作符...
保存在数组fns
中)。
第二层高阶函数
用于在闭包
中保存传给异步函数
数组的初始参数。
异步函数
数组使用 Array.prototype.reduce()
遍历执行,作为promise
通过Promise.then()
连接。
所有异步函数
只能接受一个参数
。
const pipeAsyncFunctions = (...fns) => {
return arg => {
return fns.reduce(
(prev, curFn) => prev.then(curFn),
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
);
// 一秒后打印 15
(async() => {
console.log(await sum(5));
})();
扩展阅读
以从左向右
的顺序组合同步函数
并依次执行他们。
使用一层高阶函数
。
高阶函数
用于在闭包
中保存需要执行的同步函数
数组(同步函数
作为参数传入,并通过数组展开操作符...
保存在数组fns
中)。
通过 Array.prototype.reduce()
不断返回嵌套执行的函数
。
最终返回的函数执行时,第一个传递给pipeFunctions
的同步函数
可以接收多个参数。之后的每个同步函数
只能接受上一个函数的返回值作为参数
。
const pipeFunctions = (...fns) => {
return fns.reduce((prevFn, curFn) => {
return (...args) => curFn(
prevFn(...args)
);
}
);
}
const add5 = x => x + 5;
const multiply = (x, y) => x * y;
const multiplyAndAdd5 = pipeFunctions(
multiply, add5
);
// 15
multiplyAndAdd5(5, 2);
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JSP开发之JSTL介绍和使用
- codeforces 1283E(贪心)
- codeforces1216C (矩形面积交)
- codeforces 1234C(思维)
- codeforces 1405B(思维)
- codeforces 1216D(数学)
- codeforces 1256D(优先队列+贪心)
- codeforces 1343D(差分数组)
- codeforces1385D (递归+分治)
- codeforces1294D(思维+暴力)
- codeforces 1367D(思维)
- 数据库事务处理与资源池
- codeforces 1328D(思维)
- codeforces 1283D(BFS)
- codeforces 1213D2(贪心+思维)