es6异步编程 Promise 讲解 --------各个优点缺点总结
- //引入模块
- 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)
- // })
es6异步编程 Promise 讲解 --------各个优点缺点总结的更多相关文章
- 转: ES6异步编程:Generator 函数的含义与用法
转: ES6异步编程:Generator 函数的含义与用法 异步编程对 JavaScript 语言太重要.JavaScript 只有一根线程,如果没有异步编程,根本没法用,非卡死不可. 以前,异步编程 ...
- 转: ES6异步编程: co函数库的含义与用法
转: ES6异步编程: co函数库的含义与用法 co 函数库是著名程序员 TJ Holowaychuk 于2013年6月发布的一个小工具,用于 Generator 函数的自动执行. 比如,有一个 Ge ...
- 转: ES6异步编程:Thunk函数的含义与用法
转: ES6异步编程:Thunk函数的含义与用法 参数的求值策略 Thunk函数早在上个世纪60年代就诞生了. 那时,编程语言刚刚起步,计算机学家还在研究,编译器怎么写比较好.一个争论的焦点是&quo ...
- 简单实现异步编程promise模式
本篇文章主要介绍了异步编程promise模式的简单实现,并对每一步进行了分析,需要的朋友可以参考下 异步编程 javascript异步编程, web2.0时代比较热门的编程方式,我们平时码的时候也或多 ...
- 异步编程——promise
异步编程--promise 定义 Promise是异步编程的一个解决方案,相比传统的解决方法--回调函数,使用Promise更为合理和强大,避免了回调函数之间的层层嵌套,也使得代码结构更为清晰,便于维 ...
- 异步编程Promise/Deferred、多线程WebWorker
长期以来JS都是以单线程的模式运行的,而JS又通常应用在操作用户界面和网络请求这些任务上.操作用户界面时不能进行耗时较长的操作否则会导致界面卡死,而网络请求和动画等就是耗时较长的操作.所以在JS中经常 ...
- 简述异步编程&Promise&异步函数
前言:文章由本人在学习之余总结巩固思路,不足之前还请指出. 一.异步编程 首先我们先简单来回顾一下同步API和异步API的概念 1.同步API:只有当前的API执行完成之前,才会执行下一个API 例: ...
- ES6 异步编程之一:Generator
Generator 生成器是es6原生提供的异步编程方案,其语法行为和传统函数完全不同,阮大的<ECMAScript 6 入门>一书中对生成器有比较详尽的介绍,还有一些其他的文章可以参考, ...
- 异步编程promise
异步编程发展 异步编程经历了 callback.promise.async/await.generator四个阶段,其中promise和async/await使用最为频繁,而generator因为语法 ...
随机推荐
- php 遇到报错 Call to a member function fetch_object()
1.检查语法 ,没问题 <?php require "fun.php"; $kc_sql="select distinct KCM from KCB"; ...
- 关于c头文件的使用的小记录
在用visual studio实现数据结构上的一些结构与算法的时候,想在一个工程中建立几个文件,然后主文件可以使用其他文件的函数与变量(比如定义的结构体还有数据结构接口函数). 我们可以利用头文件来 ...
- C++中的数学函数汇总
math.h 数学函数库,一些数学计算的公式的具体实现是放在math.h里,具体有: 1 三角函数 double sin (double); double cos (double); double t ...
- hdu3433A Task Process( 二分dp)
链接 二分时间,在时间内dp[i][j]表示截止到第i个人已经做了j个A最多还能做多少个B #include <iostream> #include<cstdio> #incl ...
- [转]Php MySql Class
本文转自:http://www.cnblogs.com/noevil/archive/2010/11/06/1870864.html <?php /** * 数据库操作类 * * @aut ...
- jQueryUI 购物车拖放功能
<style type="text/css"> .basket{ border:transparent solid 2px; } img{ width:80px; he ...
- [转]在ubuntu上安装chrome浏览器
原文链接: https://www.linuxidc.com/Linux/2013-10/91857.htm --------------------------------------------- ...
- 面试题9-用两个栈来实现一个队列,完成队列的Push和Pop操作
题目 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路: 一个栈压入元素,而另一个栈作为缓冲,将栈1的元素出栈后压入栈2中 代码 import java.ut ...
- R Programming week1-Data Type
Objects R has five basic or “atomic” classes of objects: character numeric (real numbers) integer co ...
- 程序员的职业方向: 是-->技术?还是-->管理?
岁之后还能不能再做程序员....... 绝大多数程序员最终的职业目标可能都是CTO,但能做到CEO的人估计会比较少,也有一少部分人自己去创业去当老板,也有部分人转行了,当老板的人毕竟是少数,转行的人都 ...