1.组合函数即由若干个函数组合成一个新的函数,同时完成数据的传递

1>最简单版本

  这种方法实现的组合函数,需要我们指定函数的执行顺序

/**第一种方法 */
function add(a, b) {
return a + b;
}
function square(a) {
return a * a;
} function compose(fn1, fn2) {
return (...args) => fn1(fn2(...args));
} console.log(compose(square, add)(1, 2));

2>升级版本

  此种方法可以顺序执行我们输入的函数


  /**第二种方法 可以按照顺序执行*/
function compose2(mids) {
return (...args) => {
let ret = mids[0](...args);
for (let i = 1; i < mids.length; i++) {
ret = mids[i](ret);
}
return ret;
}
}
console.log(compose2([add, square])(1, 2));

3>当我们的某些函数需要异步执行的时候,可以使用下面的方法,用next来完成函数的下一步操作  (类似于koa异步函数的实现过程)

    思路:异步的实现需要借助Promise,函数必须返回一个Promise

function sleep() {
return new Promise((resolve) => {
setTimeout(() => {
resolve();
}, 2000);
})
}
async function fn1(next) {
console.log('fn1');
setTimeout(() => {
console.log('fn1 settimeout'); }, 1000);
await next();
console.log('end fn1');
}
async function fn2(next) {
console.log('fn2');
await sleep();
await next();
console.log('end fn2');
}
async function fn3(next) {
console.log('end fn3');
} function compose(mids) {
return function () {//最终组合结果函数
//执行第0个
return dispatch(0);
//需要返回Promise
function dispatch(i) {
let fn = mids[i];
if (!fn) {
//执行任务结束
return Promise.resolve();
}
return Promise.resolve(fn(function next() {
return dispatch(i + 1);
}));
}
}
} compose([fn1, fn2, fn3])().then(() => console.log("任务执行结束"));

最终的执行结果是:

fn1
fn2
fn1 settimeout
end fn3
end fn2
end fn1

js的组合函数的更多相关文章

  1. 使用js 设置组合快捷键

    使用js 设置组合快捷键 使用js设置快捷键的本质就是获得你要设置的这个键的keyCode 的值,如果要加ctrl,alt,shift,那么就添加一个ctrlkey,altKey,shiftKey来判 ...

  2. js 排列 组合 的一个简单例子

    最近工作项目需要用到js排列组合,于是就写了一个简单的demo. 前几天在网上找到一个写全排列A(n,n)的code感觉还可以,于是贴出来了, 排列的实现方式: 全排列主要用到的是递归和数组的插入 比 ...

  3. js中的函数应用

    js中的函数应用 什么是函数,函数的概念 函数就像一个黑匣子,里面的东西你都不知道,但是你提供一些材料放进去,他可以制造出你需要的东西; 可以让多个一样的功能封装组合起来,然后想执行几次就执行几次 函 ...

  4. Node.js 教程 06 - 函数

    前言: 本篇介绍的是Node.js中的函数,相对于上一篇会简单一点,其实和我们Javascript中的function无异. 好了,废话不多说了,我们进入正题吧. Node.js函数: [示例1:创建 ...

  5. 关于js的回调函数的一点看法

    算了一下又有好几个月没写博客了,最近在忙公司android的项目,所以也就很少抽时间来写些东西了.刚闲下来,我就翻了翻之前看的东西.做了android之后更加感觉到手机端开发的重要性,现在做nativ ...

  6. js立即执行函数

    一.JS立即执行函数的写法 方式1.最前最后加括号 (function(){alert(1);}()); 方式2.function外面加括号   (function(){alert(1);})(); ...

  7. js 数组处理函数

    本文转载自有有<js 数组处理函数> concat 将参数列表连接到原数组后面形成一个新的数组并返回,原有数组不受影响. var arr = ["a","b& ...

  8. JS字符串替换函数:Replace(“字符串1″, “字符串2″),

    JS字符串替换函数:Replace(“字符串1″, “字符串2″), 1.我们都知道JS中字符串替换函数是Replace(“字符串1″, “字符串2″),但是这个函数只能将第一次出现的字符串1替换掉, ...

  9. js使用split函数按照多个字符对字符串进行分割的方法

    这篇文章主要介绍了js使用split函数按照多个字符对字符串进行分割的方法,实例分析了split函数的使用技巧,非常具有实用价值,需要的朋友可以参考下   本文实例讲述了js使用split函数按照多个 ...

随机推荐

  1. Python初探-Pycharm,Anaconda-人脸识别

    版权声明:博客版权所有,转载注明出处. https://blog.csdn.net/qq_33083551/article/details/82253026 1.建议先安装Anaconda,再安装Py ...

  2. Python套接字

    1.客户端/服务器架构 什么是客户端/服务器架构?对于不同的人来说,它意味着不同的东西,这取决于你问谁以及描述的是软件还是硬件系统.在这两种情况中的任何一种下,前提都很简单:服务器就是一系列硬件或软件 ...

  3. 使用公钥和私钥实现LINUX下免密登录

    linux公钥私钥实现无密码登录 首先本地主机生成公约和私钥 # ssh-keygen               /生成公钥和私钥 不要更改默认路径,中途不要输入密码,直接两次回车. 2.  将生成 ...

  4. Try-Catch真的会影响程序性能吗

    很多帖子都分析过Try-Catch的机制,以及其对性能的影响. 但是并没有证据证明,Try-Catch过于损耗了系统的性能,尤其是在托管环境下.记得园子里有位网友使用StopWatch分析过Try-C ...

  5. 第一课 PPT 所学内容总结

    制作PPT时要注意三要素即:图形,颜色搭配,字数适当. 感悟:制作一个好的PPT也并不需要华丽的画面.只需清晰的表达出自己想要表达的,就是一个好PPT.

  6. Python学习---抽屉框架分析[数据库设计分析]180313

    基本的: models.py ####################################以下都是抽屉的代码#################################### fro ...

  7. CSS制作图形速查表

    很少会有人意识到,当浏览器绘制的border,会有一个角度的问题.我们就是得用这样的一个技巧来制作三角的效果.我们只需要保证一边的边框是有色,其他边框色为透明色,这样我们就很容易制作出三角形,然后改变 ...

  8. centos6.4 minimal 安装kvm

    操作系统是网易源下载的centos 64位的minimal安装包,很多工具都没有,像gcc make wget which where 等统统没有,好在有yum 这里为了简单起见直接用yum安装kvm ...

  9. css计数器 及 鼠标经过从中间扩散一个矩形(正方形长方形均可)

    <!DOCTYPE html> <html> <head> <title>css计数器--兼容IE8</title> <meta ch ...

  10. echarts仪表盘配置参数

    require.config({ paths:{ echarts:"js/chart" } }); require([ 'echarts', 'echarts/chart/gaug ...