zoukankan      html  css  js  c++  java
  • compose函数

    redux的compose学习

    reduce 返回的是函数累计处理的结果
    注意:此处使用的reduce,意味着reduce函数时按照从左往右包裹,所以最后执行的顺序是相反的,如果需要按照按照参数的顺序执行,就使用reduceRight

     function compose(...funcs) {
            if (funcs.length === 0) {
              return args => args;
            }
            if (funcs.length === 1) {
              return funcs[0];
            }
            return funcs.reduce(
              (a, b) =>
                (...args) =>
                  a(b(...args))
            );
          }
    function funca(params) {
            console.log(params, "funca");
            return "funca";
          }
          function funcnb(params) {
            console.log(params, "funcnb");
            return "funcnb";
          }
          function funcc(params) {
            console.log(params, "funcc");
            return "funcc";
          }
          compose(funca, funcnb, funcc)("参数")
    

    效果:

    compose 组合promise

    function composePromise(...arg) {
            if (arg.length === 0) {
              return () => Promise.resolve();
            }
            if (arg.length === 1) {
              return arg[0];
            }
            return arg.reduceRight((a, b) => {
              return async (...args) => {
                return a(await b(...args));
              };
            });
          }
    //测试
     let a = async (param) => {
            return new Promise((resolve, reject) => {
              setTimeout(() => {
                console.log("xhr1", param);
                resolve("xhr1");
              }, 5000);
            });
          };
    
          let b = async (param) => {
            return new Promise((resolve, reject) => {
              setTimeout(() => {
                console.log("xhr2", param);
                resolve("xhr2");
              }, 3000);
            });
          };
          let c = async (param) => {
            return new Promise((resolve, reject) => {
              setTimeout(() => {
                console.log("xhr3", param);
                resolve("xhr3");
              }, 3000);
            });
          };
     composePromise(
            a,
            b,
            c
          )(1).then((res) => {
            console.log(res, "res");
          });
    

    效果如下:

    redux源码地址:https://github.com/reduxjs/redux/blob/master/src/compose.ts

  • 相关阅读:
    MySql数据类型详解
    MySQL日期数据类型、MySQL时间类型使用总结
    sqlcmd
    sqlserver 复制
    Do waiting or suspended tasks tie up a worker thread?
    用GDB 调试Java程序
    X64相关文章
    How do I find what queries were executing in a SQL memory dump?-----stack
    解决Sublime Text 3中文显示乱码(tab中文方块)问题
    GIT 详解
  • 原文地址:https://www.cnblogs.com/heihei-haha/p/15104430.html
Copyright © 2011-2022 走看看