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

交流

圖片描述

Promise 的方法

通過手寫 Promise 的原理後,再來理解 Promise 的方法,會更加容易了。javascript

好啦,咱們直接上代碼~java

原理傳送門 → Promise | 原理(代碼版)this

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 方法裏面,不接受成功態或失敗態的數據,走一個過場,直接值穿透到下一個裏面去。spa

適合把一些,成功態或失敗態都有的邏輯放在這裏面。prototype

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});
    });
};
相關文章
相關標籤/搜索