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)

})

promisify,promisifyAll,promise.all实现原理的更多相关文章

  1. Promise内部实现原理

    promise内部实现原理: function $Promise(fn) { // Promise 的三种状态 this.PENDING = 'pending' this.RESOLVED = 're ...

  2. nodejs 8 利用原生 util.promisify() 实现 promise.delay()

    Nodejs 8 在 util 包里新增了 promisify() .这个方法基本和 bluebird 的 promisify() 作用一样,即把最后一个参数是 callback 函数的函数变成返回 ...

  3. 160701、理解 Promise 的工作原理

    Javascript 采用回调函数(callback)来处理异步编程.从同步编程到异步回调编程有一个适应的过程,但是如果出现多层回调嵌套,也就是我们常说的厄运的回调金字塔(Pyramid of Doo ...

  4. 160623、理解 Promise 的工作原理

    Javascript 采用回调函数(callback)来处理异步编程.从同步编程到异步回调编程有一个适应的过程,但是如果出现多层回调嵌套,也就是我们常说的厄运的回调金字塔(Pyramid of Doo ...

  5. Promise.race 的原理

    // race的原理 Promise.race = function(values){ return new Promise((resolve,reject)=>{ for(let i = 0 ...

  6. Promise.all 的原理

    // all的原理 Promise.all = function(values){ return new Promise((resolve,reject)=>{ let results = [] ...

  7. JavaScript中Promise 使用、原理以及实现过程

    1.什么是 Promise promise 是目前 JS 异步编程的主流解决方案,遵循 Promises/A+ 方案. 2.Promise 原理简析 (1)promise 本身相当于一个状态机,拥有三 ...

  8. Promise的实现原理

    1.Promise 介绍 Promise类似一个事务管理器,将用户异步操作流程用流水的形式来表达,用来延迟deferred和异步asynchronous. 特点如下: (1)对象的状态不受外界影响 P ...

  9. Callback 与 Promise 间的桥梁 —— promisify

    作者:晃晃 本文原创,转载请注明作者及出处 Promise 自问世以来,得到了大量的应用,简直是 javascript 中的神器.它很好地解决了异步方法的回调地狱.提供了我们在异步方法中使用 retu ...

随机推荐

  1. Linux常用命令大全(转载收藏)

    转载自鸿燕藏锋:https://www.cnblogs.com/yjd_hycf_space/p/7730690.html 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比 ...

  2. python3 练手实例4 九九乘法口诀表

    for i in range(1,10): for j in range(1,i+1): print('{}*{}={}\t'.format(i,j,i*j),end='') print()

  3. 关于MarkDown里的图片问题

    网上看了很多人为了得到那串URL,需要弄什么python,还有自己弄个服务器. 在我看来这些都是多此一举,只要有个GitHub,然后再开两个页面,一个页面写readme,另一个写issue(不是真的写 ...

  4. Python的安装及小程序练习

    Python 1.Python的安装教程 (1)进入Python官网 (2)双击Python-3.6.4.exe安装程序,勾选Add Python 3.6 to PATH (3)选择自定义安装. (4 ...

  5. sqlyog试用期到期--win10

    1.win+R打开搜索框,输入regedit,打开windows注册表 2.删除HKEY_CURRENT_USER 下 software 的前几个随机编码.

  6. JAVA进阶20

    1.可视化日历程序(简陋版) package cn.zh.abstrac; import java.text.DateFormat; import java.text.ParseException; ...

  7. JAVA使用HttpClient时报错:Algorithm constraints check failed on signature algorithm: MD5withRSA

    今天使用httpClient.executeMethod时抛出异常:java.security.cert.CertPathValidatorException: Algorithm constrain ...

  8. BlockChain 的跨链技术的重要性和必要性

    本期我们将从跨链技术的重要性和必要性.畅想区块链未来世界.什么是跨链.目前四种跨链技术的对比.构建EOS同构跨链体系群.EOCS跨链技术介绍.跨链通道.中继等几个层面带大家走进EOS跨链和EOCS的世 ...

  9. vue.js基础

    1,感谢菜鸟教程 2,第一个实例 <html> <head> <meta charset="utf-8"> <title>Vue 测 ...

  10. 你循环的时候就可以给他们赋值了,那么就不用addClass,再根据类选择器处理,代码能一气呵成就别写成两段了

    function onCopyButtonClick() { $(".index:checked").each(function () { $(] + "__WeekCo ...