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'); });
- 实现
- 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}); }); };