es6异步编程 Promise 讲解 --------各个优点缺点总结
2017-09-12 12:05
489 查看
//引入模块 let fs=require('fs'); //异步读文件方法,但是同步执行 function read(url) { //new Promise 需要传入一个executor 执行器 //executor需要传入两个函数 resolve reject return new Promise((resolve,reject)=>{ fs.readFile(url,'utf8',function (err,data) { if(err){ reject(err) }else{ resolve(data); } }) }) }; //缺点 套了一个promise,而且捕获了2次,这两个请求没有依赖关系,时间叠加了 // read('./name.txt').then((data)=>{ // let obj={}; // obj.name=data; // read('./age.txt').then((data)=>{ // obj.age=data; // console.log(obj); // },(err)=>{ // console.log(err); // }) // // }, (err)=>{ // console.log(err); // }); //回调地狱 链式调用 //相对好点的方法,同步两个异步依次执行 异常用catch捕获 // let obj={}; // read('./name.txt').then((data)=>{ // obj.name=data; // return read('./age.txt') // }).then((data)=>{ //如果promise返回promise可以继续then // obj.age=data; // return obj //将结果向下继续传递 // }).then((data)=>{ // console.log(data) //单独处理结果 // }).catch((err)=>{ // console.log(err) // }); //all方法是promise是类上自带的方法,并发读取,失败一个都失败了,时间只是一个读取的时间 //第一个参数 传递的是数组,数组装的是一个个promise对象 //调用后会再次返回一个promise实例 //最好的写法 Promise.all([read('./name.txt'),read('./age.txt')]).then(([name,age])=>{ //data就是promise执行成功的结果类型是数组 console.log({name,age}); }).catch((err)=>{ console.log(err) }) //race如果一个失败了,都失败,如果一个成功了都成功,很少用 // Promise.race([read('./name.txt'),read('./age1.txt')]).then((data)=>{ // //data就是promise执行成功的结果类型是数组 // console.log(data); // }).catch((err)=>{ // console.log(err) // })
相关文章推荐
- BYZ原创天语w806测评--入手2天,总结优点、缺点.
- css常见的几种布局优点缺点总结
- 视图的优点与缺点总结
- 2017年1月21日学习总结----C/S 和 B/S架构的优点和缺点
- JDBC、Ibatis、Hibernate对比、以及优点缺点(个人总结)
- html5的优点与缺点大概总结
- 机器学习常用算法优点及缺点总结
- mysql binlog_format的各自优点,缺点总结
- select、poll、epoll的原理、优点、缺点比较总结
- const优点全面总结
- ES6---new Promise()讲解,Promise对象是用来干嘛的?
- 讲解及制作ppt的几个要点总结
- 数据库索引的作用和优点缺点
- HTML知识点总结以及典型例子讲解
- XMPP——xmpp协议详解、优点、缺点及优化思路
- C语言的优点、缺点和使用步骤
- [Oracle]获取执行计划的各个方法总结
- ”舍得“大法:把自己的优点当缺点倒出去
- ASP.NET中隐藏域的优点和缺点
- 分析灰盒测试优点和缺点