Promise对象

Promise对象

Promise实例

const promise = new Promise(function(resolve, reject) {
    //...
    if(异步操作成功) {
        resolve(value);
    }
    else {
        reject(error);
    }
});


Promise构造函数接受一个函数作为参数,该函数的两个参数分别为resolve和reject
resolve函数将Promise对象的状态从“未完成”变为“成功”
reject函数将状态从“未完成”变为“失败”

可以用then方法分别指定resolved状态和rejected状态的回调函数
reject函数可选

promise.then(function(value) {
    //    success
}, function(error) {
    //    failure
});

resolve和reject总是会在所有操作结束后执行

catch()
用于指定发生错误时的回调函数

p.then((val) => console.log(val))
    .catch((errr) => console.log(err));

一般来说,不要在then里面定义Reject状态的回调函数,应该使用catch方法

promise
  .then(function(data) { //cb
    // success
  })
  .catch(function(err) {
    // error
  });

finally()
不管最后转该如何,都会执行的操作

promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});

Promise.all()
将多个Prmise实例,包装成一个新的Promise实例
const p = Promise.all([p1, p2, p3]);    //参数可以不是数组,但必须具有Iterator接口,且返回的每个成员都是Promise实例

p的状态由p1,p2,p3决定
1.只有p1,p2,p3状态都变成fulfilled,p的状态才会变成fulfilled,此时p1,p2,p3的返回值组成一个数组,传递给p的回调函数
2.只要p1,p2,p3有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值会传递给p的回调函数

# 如果作为参数的Promise实例自己定义了catch方法,那么一旦被rejected,并不会触发Promise.all()的catch方法

Promise.race()
将多个Prmise实例,包装成一个新的Promise实例
只要有一个改变状态,p的状态就改变,率先改变的返回值传递给p的回调函数

Promise.resolve()
将现有对象转为Promise对象如果对象具有then方法,Promise.resolve方法会将对象转为Promise对象,并执行then方法
如果参数是一个原始值,则会返回一个新对象,状态为resolved

const p = Promise.resolve('Hello');

p.then(function (s){
  console.log(s)
});


// Hello
如果不带参数,则返回一个resolved状态的Promise对象

Promise.reject()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值