文 / 景朝霞
来源公号 / 朝霞的光影笔记
ID / zhaoxiajingjing
❥❥❥❥点个赞,让我知道你来过~❥❥❥❥
Promise 的方法
经过手写 Promise 的原理后,再来理解 Promise 的方法,会更加容易了。
好啦,我们直接上代码~
catch 方法
- 使用
catch 方法是 then 方法的语法糖,只接受 rejected 态的数据。
1let p = new Promise((resolve, reject) => {
2 reject('爱上你是我的错o(╥﹏╥)o');
3});
4
5p.then(data => {
6 console.log(data, 'data');
7}).catch(err => {
8 console.log(err, 'err');
9});
- 实现
catch 就是 then 方法的语法糖,直接调用即可~
1Promise.prototype.catch = function(callback){
2 return this.then(null, callback);
3};
finally 方法
- 使用
finally 方法,无论如何都会走到这里来的。
在 finally 方法里面,不接受成功态或失败态的数据,走一个过场,直接值穿透到下一个里面去。
适合把一些,成功态或失败态都有的逻辑放在这里面。
1let p = new Promise((resolve, reject) => {
2 reject('爱上你是我的错o(╥﹏╥)o');
3});
4
5p.then(data => {
6 console.log(data, 'data');
7}).finally(data => {
8 console.log(data, 'finally');
9}).catch(err => {
10 console.log(err, 'err');
11});
- 实现
- finally 方法里面,值只是在这里走个过场
- 如果 callback 里面是一个Promise,那么需要等着他的结果。
1Promise.resolve = function (value){
2 return new Promise((resolve, reject) => {
3 resolve(value);
4 });
5};
6Promise.prototype.finally = function (callback){
7 return this.then(data => {
8 return Promise.resolve(callback()).then(() => data);
9 }, err => {
10 return Promise.resolve(callback()).then(() => {throw err});
11 });
12};