通过手写 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}); }); };