promise中第二个任务reject后catch没有捕获到的问题

代码如下,要怎样才可以在尾部catch能捕获前面任何一个任务的reject?


var task1 = new Promise(function(resolve, reject){
  resolve('success');
});
var task2 = new Promise(function(resolve, reject){
  reject('error'); 
});

task1.then(task2)
.catch(function(error) {
    console.log('catched:', error);
});

报 VM266:5 Uncaught (in promise) error

阅读 5.2k
5 个回答
task1.then(function () {
        return task2
    })
    .catch(function(error) {
        console.log('catched:', error);
    });

.then的参数是函数,而task2是一个Promise对象,你后面肯定catch不了呀

因为你task2这个promise抛出了错误但是却没有catch函数对它进行捕获,如果task1task2对调,或者把task2里面的reject(error)改成resolve,应该就不会报错了。

reject的promise必须跟catch来捕捉失败的情况,不然会报错

var task2 = new Promise(function(resolve, reject){
  reject('error'); 
}).catch(function(error) {
    console.log('catched:', error);
});

这样也可以

补充一点, 如果你的任务是并行运行的, 没有依赖关系的话,应该用Promise.all

var jobs = [];
var task1 = new Promise(function(resolve, reject){
  resolve('success');
});
var task2 = new Promise(function(resolve, reject){
  reject('error'); 
});

jobs.push(task1);
jobs.push(task2);

Promise.all(jobs).catch(function(error) {
    console.log('catched:', error);
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题