通過手寫 Promise 的原理後,再來理解 Promise 的方法,會更加容易了。javascript
好啦,咱們直接上代碼~java
原理傳送門 → Promise | 原理(代碼版)this
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 方法裏面,不接受成功態或失敗態的數據,走一個過場,直接值穿透到下一個裏面去。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'); });
- finally 方法裏面,值只是在這裏走個過場
- 若是 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}); }); };