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

发布于 2022-09-11 15:04:13 字数 357 浏览 14 评论 0

代码如下,要怎样才可以在尾部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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

关于从前 2022-09-18 15:04:13

补充一点, 如果你的任务是并行运行的, 没有依赖关系的话,应该用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);
});
勿忘初心 2022-09-18 15:04:13

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

三月梨花 2022-09-18 15:04:13

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

薄荷→糖丶微凉 2022-09-18 15:04:13
task1.then(function () {
        return task2
    })
    .catch(function(error) {
        console.log('catched:', error);
    });
爱,才寂寞 2022-09-18 15:04:13

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

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

这样也可以

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文