1. //引入模块
  2. let fs=require('fs');
  3. //异步读文件方法,但是同步执行
  4.  
  5. function read(url) {
  6. //new Promise 需要传入一个executor 执行器
  7. //executor需要传入两个函数 resolve reject
  8. return new Promise((resolve,reject)=>{
  9. fs.readFile(url,'utf8',function (err,data) {
  10. if(err){
  11. reject(err)
  12. }else{
  13. resolve(data);
  14. }
  15. })
  16. })
  17. };
  18.  
  19. //缺点 套了一个promise,而且捕获了2次,这两个请求没有依赖关系,时间叠加了
  20. // read('./name.txt').then((data)=>{
  21. // let obj={};
  22. // obj.name=data;
  23. // read('./age.txt').then((data)=>{
  24. // obj.age=data;
  25. // console.log(obj);
  26. // },(err)=>{
  27. // console.log(err);
  28. // })
  29. //
  30. // }, (err)=>{
  31. // console.log(err);
  32. // });
  33.  
  34. //回调地狱 链式调用
  35. //相对好点的方法,同步两个异步依次执行 异常用catch捕获
  36. // let obj={};
  37. // read('./name.txt').then((data)=>{
  38. // obj.name=data;
  39. // return read('./age.txt')
  40. // }).then((data)=>{ //如果promise返回promise可以继续then
  41. // obj.age=data;
  42. // return obj //将结果向下继续传递
  43. // }).then((data)=>{
  44. // console.log(data) //单独处理结果
  45. // }).catch((err)=>{
  46. // console.log(err)
  47. // });
  48.  
  49. //all方法是promise是类上自带的方法,并发读取,失败一个都失败了,时间只是一个读取的时间
  50. //第一个参数 传递的是数组,数组装的是一个个promise对象
  51. //调用后会再次返回一个promise实例
  52. //最好的写法
  53. Promise.all([read('./name.txt'),read('./age.txt')]).then(([name,age])=>{
  54. //data就是promise执行成功的结果类型是数组
  55. console.log({name,age});
  56. }).catch((err)=>{
  57. console.log(err)
  58. })
  59.  
  60. //race如果一个失败了,都失败,如果一个成功了都成功,很少用
  61. // Promise.race([read('./name.txt'),read('./age1.txt')]).then((data)=>{
  62. // //data就是promise执行成功的结果类型是数组
  63. // console.log(data);
  64. // }).catch((err)=>{
  65. // console.log(err)
  66. // })

es6异步编程 Promise 讲解 --------各个优点缺点总结的更多相关文章

  1. 转: ES6异步编程:Generator 函数的含义与用法

    转: ES6异步编程:Generator 函数的含义与用法 异步编程对 JavaScript 语言太重要.JavaScript 只有一根线程,如果没有异步编程,根本没法用,非卡死不可. 以前,异步编程 ...

  2. 转: ES6异步编程: co函数库的含义与用法

    转: ES6异步编程: co函数库的含义与用法 co 函数库是著名程序员 TJ Holowaychuk 于2013年6月发布的一个小工具,用于 Generator 函数的自动执行. 比如,有一个 Ge ...

  3. 转: ES6异步编程:Thunk函数的含义与用法

    转: ES6异步编程:Thunk函数的含义与用法 参数的求值策略 Thunk函数早在上个世纪60年代就诞生了. 那时,编程语言刚刚起步,计算机学家还在研究,编译器怎么写比较好.一个争论的焦点是&quo ...

  4. 简单实现异步编程promise模式

    本篇文章主要介绍了异步编程promise模式的简单实现,并对每一步进行了分析,需要的朋友可以参考下 异步编程 javascript异步编程, web2.0时代比较热门的编程方式,我们平时码的时候也或多 ...

  5. 异步编程——promise

    异步编程--promise 定义 Promise是异步编程的一个解决方案,相比传统的解决方法--回调函数,使用Promise更为合理和强大,避免了回调函数之间的层层嵌套,也使得代码结构更为清晰,便于维 ...

  6. 异步编程Promise/Deferred、多线程WebWorker

    长期以来JS都是以单线程的模式运行的,而JS又通常应用在操作用户界面和网络请求这些任务上.操作用户界面时不能进行耗时较长的操作否则会导致界面卡死,而网络请求和动画等就是耗时较长的操作.所以在JS中经常 ...

  7. 简述异步编程&Promise&异步函数

    前言:文章由本人在学习之余总结巩固思路,不足之前还请指出. 一.异步编程 首先我们先简单来回顾一下同步API和异步API的概念 1.同步API:只有当前的API执行完成之前,才会执行下一个API 例: ...

  8. ES6 异步编程之一:Generator

    Generator 生成器是es6原生提供的异步编程方案,其语法行为和传统函数完全不同,阮大的<ECMAScript 6 入门>一书中对生成器有比较详尽的介绍,还有一些其他的文章可以参考, ...

  9. 异步编程promise

    异步编程发展 异步编程经历了 callback.promise.async/await.generator四个阶段,其中promise和async/await使用最为频繁,而generator因为语法 ...

随机推荐

  1. php 遇到报错 Call to a member function fetch_object()

    1.检查语法 ,没问题 <?php require "fun.php"; $kc_sql="select distinct KCM from KCB"; ...

  2. 关于c头文件的使用的小记录

    在用visual studio实现数据结构上的一些结构与算法的时候,想在一个工程中建立几个文件,然后主文件可以使用其他文件的函数与变量(比如定义的结构体还有数据结构接口函数).  我们可以利用头文件来 ...

  3. C++中的数学函数汇总

    math.h 数学函数库,一些数学计算的公式的具体实现是放在math.h里,具体有: 1 三角函数 double sin (double); double cos (double); double t ...

  4. hdu3433A Task Process( 二分dp)

    链接 二分时间,在时间内dp[i][j]表示截止到第i个人已经做了j个A最多还能做多少个B #include <iostream> #include<cstdio> #incl ...

  5. [转]Php MySql Class

    本文转自:http://www.cnblogs.com/noevil/archive/2010/11/06/1870864.html <?php /**  * 数据库操作类  *  * @aut ...

  6. jQueryUI 购物车拖放功能

    <style type="text/css"> .basket{ border:transparent solid 2px; } img{ width:80px; he ...

  7. [转]在ubuntu上安装chrome浏览器

    原文链接: https://www.linuxidc.com/Linux/2013-10/91857.htm --------------------------------------------- ...

  8. 面试题9-用两个栈来实现一个队列,完成队列的Push和Pop操作

    题目 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路: 一个栈压入元素,而另一个栈作为缓冲,将栈1的元素出栈后压入栈2中 代码 import java.ut ...

  9. R Programming week1-Data Type

    Objects R has five basic or “atomic” classes of objects: character numeric (real numbers) integer co ...

  10. 程序员的职业方向: 是-->技术?还是-->管理?

    岁之后还能不能再做程序员....... 绝大多数程序员最终的职业目标可能都是CTO,但能做到CEO的人估计会比较少,也有一少部分人自己去创业去当老板,也有部分人转行了,当老板的人毕竟是少数,转行的人都 ...