前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

Promise

原创
作者头像
李才哥
修改2021-02-23 14:32:25
6800
修改2021-02-23 14:32:25
举报
文章被收录于专栏:李才哥李才哥

Promise

Promise 的含义

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大

对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)

一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected

基本用法

ES6 规定,Promise对象是一个构造函数,用来生成Promise实例

Promise.prototype.then()

Promise 实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的

可以采用链式写法,即then方法后面再调用另一个then方法

Promise.prototype.catch()

Promise.prototype.catch方法是.then(null, rejection)的别名,用于指定发生错误时的回调函数

Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止

Promise.prototype.finally()

finally方法用于指定不管 Promise 对象最后状态如何,都会执行的操作

Promise.all()

Promise.all方法用于将多个 Promise 实例,包装成一个新的 Promise 实例

(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。

(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

Promise.race()

Promise.race方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例

只要其中之中有一个实例率先改变状态,状态就跟着改变

const p = Promise.race([p1, p2, p3]);

Promise.resolve()

有时需要将现有对象转为 Promise 对象,Promise.resolve方法就起到这个作用

参数是一个 Promise 实例

参数是一个thenable对象

参数不是具有then方法的对象,或根本就不是对象

不带有任何参数

Promise.reject()

Promise.reject(reason)方法也会返回一个新的 Promise 实例,该实例的状态为rejected

应用

我们可以将图片的加载写成一个Promise,一旦加载完成,Promise的状态就发生变化。

使用 Generator 函数管理流程,遇到异步操作的时候,通常返回一个Promise对象。

Promise.try()

Promise.try就是模拟try代码块,就像promise.catch模拟的是catch代码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Promise 的含义
    • Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大
      • 对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)
        • 一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected
        • 基本用法
          • ES6 规定,Promise对象是一个构造函数,用来生成Promise实例
          • Promise.prototype.then()
            • Promise 实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的
              • 可以采用链式写法,即then方法后面再调用另一个then方法
              • Promise.prototype.catch()
                • Promise.prototype.catch方法是.then(null, rejection)的别名,用于指定发生错误时的回调函数
                  • Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止
                  • Promise.prototype.finally()
                    • finally方法用于指定不管 Promise 对象最后状态如何,都会执行的操作
                    • Promise.all()
                      • Promise.all方法用于将多个 Promise 实例,包装成一个新的 Promise 实例
                        • (1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
                          • (2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
                          • Promise.race()
                            • Promise.race方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例
                              • 只要其中之中有一个实例率先改变状态,状态就跟着改变
                              • Promise.resolve()
                                • 有时需要将现有对象转为 Promise 对象,Promise.resolve方法就起到这个作用
                                  • 参数是一个 Promise 实例
                                    • 参数是一个thenable对象
                                      • 参数不是具有then方法的对象,或根本就不是对象
                                        • 不带有任何参数
                                        • Promise.reject()
                                          • Promise.reject(reason)方法也会返回一个新的 Promise 实例,该实例的状态为rejected
                                          • 应用
                                            • 我们可以将图片的加载写成一个Promise,一旦加载完成,Promise的状态就发生变化。
                                              • 使用 Generator 函数管理流程,遇到异步操作的时候,通常返回一个Promise对象。
                                              • Promise.try()
                                                • Promise.try就是模拟try代码块,就像promise.catch模拟的是catch代码
                                                领券
                                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档