Promise | catch、finally 方法(代码版)

交流

《Promise | catch、finally 方法(代码版)》

Promise 的方法

经过手写 Promise 的原理后,再来理解 Promise 的方法,会更加容易了。

好啦,我们直接上代码~

原理传送门 → Promise | 原理(代码版)

catch 方法

  • 使用

catch 方法是 then 方法的语法糖,只接受 rejected 态的数据。

let p = new Promise((resolve, reject) => {
    reject('爱上你是我的错o(╥﹏╥)o');
});

p.then(data => {
    console.log(data, 'data');
}).catch(err => {
    console.log(err, 'err');
});
  • 实现

catch 就是 then 方法的语法糖,直接调用即可~

Promise.prototype.catch = function(callback){
    return this.then(null, callback);
};

finally 方法

  • 使用

finally 方法,无论如何都会走到这里来的。

在 finally 方法里面,不接受成功态或失败态的数据,走一个过场,直接值穿透到下一个里面去。

适合把一些,成功态或失败态都有的逻辑放在这里面。

let p = new Promise((resolve, reject) => {
    reject('爱上你是我的错o(╥﹏╥)o');
});

p.then(data => {
    console.log(data, 'data');
}).finally(data => {
    console.log(data, 'finally');
}).catch(err => {
    console.log(err, 'err');
});
  • 实现
  1. finally 方法里面,值只是在这里走个过场
  2. 如果 callback 里面是一个Promise,那么需要等着他的结果。
Promise.resolve = function (value){
    return new Promise((resolve, reject) => {
        resolve(value);
    });
};
Promise.prototype.finally = function (callback){
    return this.then(data => {
        return Promise.resolve(callback()).then(() => data);
    }, err => {
        return Promise.resolve(callback()).then(() => {throw err});
    });
};
    原文作者:Pink
    原文地址: https://segmentfault.com/a/1190000020874525
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞