• promisify,promisifyAll,promise.all实现原理


    1.promisify

    function toPrimisify (fn){
    return function (...args){
          return new Promise(function(resolve,reject){
               fn(...args,function(err,data){
                err?reject(err):resolve(data)
              })
         })
    }
    let read2 = toPrimisify(fs.readFile);
    fs.readFile'./2.txt','utf8').then(res=>{console.log(res)});

    2.promisifyAll

    function toPromisifyAll(obj){

    Object.keys(obj).forEach((item,index)=>{

    if(typeof obj[item]=='function')
    obj[item+'Async'] =toPrimisify(obj[item])
    })
    }
    toPromisifyAll(fs);
    fs.readFileAsync('./2.txt','utf8').then(res=>{console.log(res)});

    3.promise.all

    function promiseAll(promises){
         return new Promise(function(resolve,reject){
                if(!Array.isArray(promises)){
                 return reject(new TypeError("argument must be anarray"))
               }
        var countNum=0;
        var promiseNum=promises.length;
        var resolvedvalue=new Array(promiseNum);
        for(var i=0;i<promiseNum;i++){
          (function(i){
             Promise.resolve(promises[i]).then(function(value){
                countNum++;
               resolvedvalue[i]=value;
              if(countNum===promiseNum){
                  return resolve(resolvedvalue)
              }
           },function(reason){
            return reject(reason)
          )
         })(i)
        }
    })
    }

    var p1=Promise.resolve(1),
    p2=Promise.resolve(2),
    p3=Promise.resolve(3);

    promiseAll([p1,p2,p3]).then(function(value){
    console.log(value)

    })

  • 相关阅读:
    npm发包流程
    K8S 多集群管理命令行工具: KubeCM
    为什么打印出来的单词少一横,如H、A、e等等
    Redission锁的设计原理和应用
    ELK学习笔记
    题解 noip2018模拟测试赛(三十五)
    题解 noip2018模拟测试赛(三十三)
    题解 noip2018模拟测试赛(三十二)
    题解 noip2018模拟测试赛(三十一)
    题解 【BZOJ3309】DZY Loves Math
  • 原文地址:https://www.cnblogs.com/qiyc/p/10453616.html
Copyright © 2020-2023  润新知