ES6修补了一位Js修真者诸多的遗憾。

曾几何时,我这个小白从js非阻塞特性的坑中爬出来,当我经历了一些回调丑陋的写法和优化的尝试之后,我深深觉得js对于多线程阻塞式的开发语言而言,可能有着其太明显的缺点,而又无法忽略的是也正因为这一点,node.js处理并行的能力被人看作优点,在我看来,这其实有着些讽刺的意味,就好像踢足球时有的人总夸你腿短,所以频率快下盘稳好控球。。。好在js从出生以来就有一种独特的特质,就是模仿,对,就是模仿,模仿别人的优点来补足自己,同时保持自己的长处。

ES6就是通过Promise对象模仿出了异步处理更合理的处理方式。鼓掌!“啪啪啪。。。”

废话扯到这里,我们来看如何通过promise对象处理异步操作。

什么是Promise原型对象?

ES6 原生提供了 Promise原型 对象,用来传递异步操作的消息。让异步操作(通常是异步操作)事件队列之间知道彼此相邻的执行先后顺序。这样说,我相信初次接触的人会不太理解,没事,我提供一个清晰的实例来讲解。

基本的promise基础知识,你需要到 http://www.jianshu.com/p/063f7e490e9a 学习相关内容。

Promise怎么用实现异步?

让我们来看这个例子:

new Promise(function(resolve,reject){resolve();      //这里指调用后面then的方法体内容,即先执行2000ms的动作}).then(function() {new Promise(function (resolve, reject) {setTimeout(function () {alert("先执行2000ms动作!");resolve();     //这里指调用后面then的方法体内容,执行1000ms的动作}, 2000);}).then(function () {setTimeout(function () {alert("再执行1000ms动作!");}, 1000);});});

  这段代码会先执行2000ms动作,再执行1000ms动作。

一个Promise实例对象会有三个状态,Pending(进行中)、Resolved(已完成,又称 Fulfilled)和 Rejected(已失败)。其构造函数的参数为一个带有两个状态的参数的匿名函数,这两个状态在这儿指代将要执行的函数行为。

你需要注意的是,一个promise对象只能指派一个固定的函数行为,即resolve与reject指代一个固定的函数行为,即后面紧接着的then或err的函数内容。如果你想接着进行下一步异步操作,你需要在相应函数体内再兴建一个新的promise对象,并规定它对应状态的函数行为。这里往往是别的教程没有说清的地方。

我们再来探究一下如何用优化调用的写法?

如果Promise只是实现这样层层嵌入的模样,我并不觉得它对层层回调有多大的优化的地方。我们思考如何用简洁直观的链式调用形式来使用Promise对象。

我们知道Promise对象的then()方法会返回给下一个then()一个参数,如果我们让这个参数为新的Promise实例对象的话,不就能实现链式调用不同的Promise对象规定的resolve行为了吗?想到如此,迫不及待做尝试,看下面的代码:

new Promise(function(resolve,reject){setTimeout(function(){alert("执行3000ms的动作!");    //3000ms动作resolve();},3000);}).then(function(){return  new Promise(function(resolve,reject){setTimeout(function(){alert("执行2000ms的动作!");     //2000ms动作resolve();},2000);});}).then( function(){alert("执行0ms的动作!");      //0ms动作});

   这段代码会先执行3000ms动作,在执行2000ms动作,最后执行0ms动作!我们成功地实现了Promise对象的链式调用解决了异步操作的问题!此处应该再一次响起掌声“啪啪啪。。。”;

转载于:https://www.cnblogs.com/zhu-xingyu/p/6057933.html

ES6的promise对象应该这样用相关推荐

  1. 【ES6】Promise对象详解

    [ES6]Promise对象详解 一.Promise对象的含义 二.Promise对象的用法 三.Promise对象的几个应用[重点] 1.时间延迟函数 2.图片异步加载 查看更多ES6教学文章: 参 ...

  2. 谈谈 ES6 的 Promise 对象

    2019独角兽企业重金招聘Python工程师标准>>> 谈谈 ES6 的 Promise 对象 异步编程 promise es6 javascript 前言 开篇首先设想一个日常开发 ...

  3. 第十八节:教你如何使用ES6的Promise对象

    Promise对象,ES6新增的一个全新特性,今天我们要好好学习一下它. Promise的设计初衷 首先,我们先一起了解一下,为什么要设计出这么一个玩意儿,用它是为了解决什么问题? 带着这个问题,我们 ...

  4. [ES6] 细化ES6之 -- Promise对象

    Promise对象是什么 Promise对象是什么 ES6新增了Prormnise对象,该对象允许对延迟和异步操作流程进行控制.一个Promise对象就是一个代表了异步操作最终完成或者失败的对象. 开 ...

  5. 自学-ES6篇-Promise对象

    1.Promise Promise是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6将其写进了语言标准,统一了用法,原生提供了Promise ...

  6. ES6学习 - Promise对象

    Promise Promise是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步 ...

  7. 使用ES6中Promise对象来封装ajax操作 以及then方法的返回值

    1 Promise的含义 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息.Pr ...

  8. es6 --- 用promise对象实现Ajax操作的一个实例

    首先回顾一下Ajax请求的步骤 var client = new XMLHttpRequest(); client.open("GET", url); client.onready ...

  9. 【ES6】Proxy对象

    [ES6]Proxy对象 一.Proxy的基本用法 二.Proxy示例的方法 1)get() 2)set() 3)apply() 查看更多ES6教学文章: 参考文献 引言:ES6规范里面新增了Prox ...

  10. ES6之路第十二篇:Promise对象

    Promise的含义 Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Prom ...

最新文章

  1. 学界 | DeepMind论文解读:通过删除神经元来了解深度学习
  2. 搜狗浏览器也可以直接安装Chrome插件,太棒了
  3. 未来数据中心的五大“走心”创新
  4. 【web前端特效源码】使用HTML5+CSS3+JavaScript制作3D 立体图片动画效果~~适合初学者~超简单~ |前端开发|IT软件
  5. 大数据经典学习路线以及各阶段所发挥的作用
  6. 换成Everyone还是访问被拒绝的解决办法
  7. flex布局中的align-content属性
  8. 现代电子计算机数学理论基础,知到食品营养学(暨南大学)2020网课答案
  9. 二分法和黄金分割法的区别和联系,附Python代码
  10. SpringBoot + uni-app开发企业级图书商城系统
  11. JS 基础知识点与高频考题解析
  12. Flink on yarn 集群HA 配置
  13. AXI(Advanced eXtensible Interface)协议规范
  14. TCP/IP与OSI
  15. 移动安全学习教程:移动安全学习框架
  16. 中电资讯-政府工作报告提出2022“金融新任务”;代表共话数字经济;代表提议建立全国统一金融信息数据库
  17. 智和信通,部署智慧交通运维系统,构建一站式运维监控平台
  18. 黑客与画家:Milvus x Cleveland Museum of Art
  19. ❤️软件设计师之程序设计语言与语言处理程序基础“小总结”(莽起来)❤️
  20. 在android X(安卓10版本)运行创建父文件夹失败,解决办法

热门文章

  1. CSS3 实现图片上浮动画
  2. #openssl #爆重大漏洞heartbleed,危及两亿网民!!!
  3. 深度LINUX不喜欢
  4. 教你如何用双SATA硬盘组建RAID系统
  5. 看图说话,FastJson 并没有那么流行!
  6. 程序员不满薪资拒绝offer,HR怒称:估计你一辈子就是个程序员
  7. 性能优化的常见模式及趋势
  8. Google 发布首款微信小程序,各种灵魂画作出没!
  9. python大漠插件多开_[求助,]用python调用大漠插件,注册好后调用出错.完全不会了...
  10. *第十一周*数据结构实践项目一【二叉树的层次遍历算法】