首页 > 其他 > 详细

promise

时间:2019-08-20 14:36:06      阅读:90      评论:0      收藏:0      [点我收藏+]

1. 一般总是建议,Promise 对象后面要跟catch方法,这样可以处理 Promise 内部发生的错误。

catch方法返回的还是一个 Promise 对象,因此后面还可以接着调用then方法。

const p1 =new Promise((resolve, reject) => {
    resolve(x+2); // 会报错,因为x没有声明
});

p1.catch((err) => {
    console.log(‘oh no‘, err);   // catch 返回一个resolved promise对象
}).then(() => {
    console.log(‘carry on‘);
});
// oh no ReferenceError: x is not defined
// carry on

catch方法中,还能再抛出错误。

const someAsyncThing = function() {
  return new Promise(function(resolve, reject) {
    // 下面一行会报错,因为x没有声明
    resolve(x + 2);
  });
};

someAsyncThing().then(function() {
  return someOtherAsyncThing();
}).catch(function(error) {
  console.log(‘oh no‘, error);
  // 下面一行会报错,因为 y 没有声明
  y + 2;
}).then(function() {
  console.log(‘carry on‘);    //没有执行,因为catch中返回的是一个reject的promise
});

// oh no [ReferenceError: x is not defined]

catch方法抛出一个错误,因为后面没有别的catch方法了,导致这个错误不会被捕获,也不会传递到外层。

 

2. promise.all

let p3 = new Promise((resolve, reject) => {
  resolve(‘hello‘);
})
.then(result => result)
.catch(e => e);

let p4 = new Promise((resolve, reject) => {
  throw new Error(‘报错了‘);
})
.then(result => result)
.catch(e => e);

Promise.all([p3, p4])
.then(result => console.log(‘hi‘))
.catch(e => console.log(e));

// hi  ["hello", Error: 报错了
    at <anonymous>:8:9
    at new Promise (<anonymous>)
    at <anonymous>:7:10]

 

promise

原文:https://www.cnblogs.com/ceceliahappycoding/p/11382268.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!