Promise总结-阿里云开发者社区

开发者社区> 开发与运维> 正文

Promise总结

简介: Promise是一种异步编程解决方案,es6中原生提供了Promise对象有三种状态:pending、resolved、rejected。状态一旦改变,就不会再变。 基本用法 var p = new Promise(function(resolve, reject){ resolve('成功') // or reject('失败') }) p.

Promise是一种异步编程解决方案,es6中原生提供了Promise对象
有三种状态:pendingresolvedrejected。状态一旦改变,就不会再变。

基本用法

var p = new Promise(function(resolve, reject){
  resolve('成功')
  // or
  reject('失败')
})
p.then(function(result) {
  console.log(result) // 成功
}).catch(function(error){
  console.log(error) // 失败
})

Promise.prototype.then()

链式调用,参数为函数,第一个函数得到成功结果,第二个函数得到失败结果

var p = new Promise(function(resolve, reject){
  resolve()
})
p.then(function(success){
  console.log(success)
}, function(error){
  console.log(error)
})

Promise.prototype.catch()

捕获失败状态

Promise.prototype.finally()

es2018中添加,无论状态是什么都会去执行

Promise.all()

Promise.all([p1, p2, p3]) // p1,p2,p3都为promise对象

Promise.race()

Promise.race([p1, p2, p3]) // p1,p2,p3都为promise对象

Promise.resolve()

将现有对象转化为Promise对象

  1. 参数是一个Promise实例,那么Promise.resolve将不做任何修改,直接返回这个实例
  2. 参数是一个thanable对象,具有then方法的对象

    let thanable = {
      then: function(resolve, reject){
        resolve(2332)
      }
    }
    
    let p1 = Promise.resolve(thenable)
    p1.then(function(value) {
      console.log(value) // 2332
    })

    Promise.resolve方法将会把这个对象转化为Promise对象,并立即执行thenable的then方法

  3. 参数不是具有then方法的对象,或者不是对象。是一个原始值,则直接返回Promise对象,状态为resolved

    var p = Promise.resolve('hello')
    p.then(function(value){
      console.log(value) // hello
    })
  4. 不带有任何参数,直接返回一个resolved状态的Promise对象

Promise.reject()

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

const p = Promise.reject('出错了');
// 等同于
const p = new Promise((resolve, reject) => reject('出错了'))

p.then(null, function (s) {
  console.log(s)
});
// 出错了

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章