文 / 景朝霞
来源公号 / 朝霞的光影笔记
ID / zhaoxiajingjing
❥❥❥❥点个赞,让我知道你来过~❥❥❥❥

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});
    });
};

ID:zhaoxiajingjing


Pink
269 声望14 粉丝

没有什么是20遍解决不了的,如果有~那就再写20遍