文 / 景朝霞
来源公号 / 朝霞的光影笔记
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');
});
- 实现
- 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});
});
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。