Promise对象

一,概念

promise是异步编程的一种解决方案,他利用了柯里化函数的原理实现了链式调用,他可以让我们写起来像写同步代码一样,不必一层层的嵌套回调函数,就是所谓的回调地狱问题。

二,特点

1,他有三种状态:进行中pending成功fulfilled--调用resolve、失败rejected--调用reject

2,他的状态不受外界影响,一旦发生变化,就不会再次改变

3,创建promise对象时必须传入一个函数,不然会报错

4,函数的参数是resolve(成功时调用)和reject(失败时调用)两个回调函数

5,他一旦被新建,就会立即执行,无法中途取消

6,用then监听执行结果

7,then方法每次执行完都会返回一个新的promise对象

三,使用示例

const add = new Promise((resolve, reject) => {
    if (xxx) {        // 成功
        resolve();
    } else {          // 失败
        reject();
    }
});

add().then((res) => {
    // 成功resolve的回调
}).then((err) => {
    // 失败reject的回调,可省略
});

说明:因为catch是then的语法糖,因此常用的使用方法是promise().then() + catch(),通常不会写reject的then方法。

四,其他重要用法

catch() - catch方法是then方法的语法糖,用于指定then中发生错误时,直接在catch中捕获

finally() - 无论执行还是失败,最后都一定会执行的方法(ES2018引入)

Primise.all([p1, ...pN]) - 参数为一个promise对象的数组,该方法是并行执行多个promise任务所有数组中promise任务都执行完之后,再执行then方法。

        结果:所有任务都成功resolve,最终的结果才是成功resolve;如果有一个执行失败(reject),则最后的结果就是失败(reject)

Promise.race(p1, ...pN) - 赛跑,与all方法类似,不同的是,他的promise数组中的所有promise任务以最快一个执行完的为准

        结果:如果指定时间内,第一个执行完的promise任务结果为成功resolve,则最后的结果就是成功;如果超过指定时间,还是没有任何任务执行完,那最终的结果就是失败reject

多个异步串行的任务 - 可以通过then方法进行多个链式调用,其中任何一个任务失败都会执行catch处理错误

function add(val){
    return new Promise((resolve, reject) => {
         resolve(val++);
    });
}

function minus() {
    return new Promise((resolve, reject) => {
         resolve(val--);
    });
}

function p() {
    return new Promise((resolve, reject) => {
        resolve(1);
    });
}

p.then(add)
 .then(add)
 .then(minus)
 .catch((err) => {
    console.log(err)
 })

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妍思码匠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值