Promise

Javascript是一种单线程的语言,所有的代码必须按照所谓的“自上而下”的顺序来执行。本特性带来的问题就是,一些将来的、未知的操作,必须异步执行。异步执行可以用回调函数实现。异步操作会在将来的某个时间点触发一个函数调用
在实际的使用当中,有非常多的应用场景我们不能立即知道应该如何继续往下执行。最重要也是最主要的一个场景就是ajax请求。通俗来说,由于网速的不同,可能你得到返回值的时间也是不同的,这个时候我们就需要等待,结果出来了之后才知道怎么样继续下去。
Promise 表示一个异步操作的最终结果,与之进行交互的方式主要是 then 方法,该方法注册了两个回调函数,用于接收 promise 的终值或本 promise 不能执行的原因
“承诺将来会执行”的对象在JavaScript中称为Promise对象

实际上Promise上的实例_promise是一个对象,不是一个函数。在声明的时候,Promise传递的参数函数会立即执行,因此Promise使用的正确姿势是在其外层再包裹一层函数。每个Promise的实例对象,都有一个then的方法,这个方法就是用来处理之前各种异步逻辑的结果
一个 Promise 的当前状态必须为以下三种状态中的一种:等待态(Pending)、执行态(Fulfilled)和拒绝态(Rejected)
Promise的构造函数接收一个函数作为参数,该函数接受两个额外的函数,resolve和reject,Promise正是通过这两个函数来控制异步操作的结果
catch方法除了中断链式调用,还有try catch的作用,也就是说,then里面的逻辑代码如果出现了错误,并不会在控制台抛出,而是会直接由catch捕获
then(null, function() {}) 就等同于catch(function() {})

1.解决的问题

  • 回调地狱
  • 为了我们的代码更加具有可读性和可维护性,我们需要将数据请求与数据处理明确的区分开来

现在所有的库几乎都将ajax请求利用Promise进行了封装,因此我们在使用jQuery等库中的ajax请求时,都可以利用Promise来让我们的代码更加优雅和简单。这也是Promise最常用的一个场景,因此我们一定要非常非常熟悉它,这样才能在应用的时候更加灵活

2.ES6对Promise标准的扩展

2.1 Promise.all的扩展

本扩展实现了将多个异步操作合并为一个操作,也就是并行处理异步,最后统一操作结果,注意:本方法只能通过Promise对象直接调用,实例不能进行此操作。

all()接收一个参数数组,数组中的每一项都对应一个

2.1 Promise.race的扩展

race本意为赛跑,顾名思义,race的用法就是并列的几个异步操作,谁先处理结束就以谁为准。race接收一个参数数组
第一个结束的异步操作回调后,其它的异步操作还会继续执行,只是并不会继续进入then了而已

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • title: promise总结 总结在前 前言 下文类似 Promise#then、Promise#resolv...
    JyLie阅读 14,206评论 1 21
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 13,747评论 26 95
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 12,757评论 0 29
  • Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函...
    neromous阅读 12,776评论 1 56
  • 你有没有发现,在周遭的朋友中,有一种人(比例大概是5%—10%),总是在大部分时候让你觉得很舒服,而且这种人在现实...
    知行思合一阅读 3,021评论 0 1