gpt4 book ai didi

javascript - Q promise 中的错误处理

转载 作者:行者123 更新时间:2023-11-29 16:51:36 26 4
gpt4 key购买 nike

我对 Q promise 错误处理的理解有点困惑。假设我有以下功能(仅供演示):

function first() {
console.log('first');
var done = Q.defer();
done.resolve('first');
return done.promise;
}

function second() {
console.log('second');
var done = Q.defer();
done.resolve('second');
return done.promise;
}

function third() {
console.log('third');
var done = Q.defer();
done.resolve('third');
return done.promise;
}

function fourth() {
console.log('fourth');
var done = Q.defer();
done.resolve('fourth');
return done.promise;
}

function doWork() {
return first().then(function() {
return second();
}).then(function() {
return third()
}).then(function() {
return fourth();
});
}

doWork().catch(function(err) {
console.log(err);
});

一切顺利。

现在,如果在second、thirdfourth 函数中出现一些错误(例如由异步调用抛出),我可以优雅地捕获它。

例如,如果在第二、第三第四函数中,我添加:

throw new Error('async error');

错误被捕获。完美!

但让我感到困惑的是,如果在第一个函数中抛出错误,则不会捕获错误,这会中断我的执行。

请有人告诉我为什么或我做错了什么?

非常感谢!

最佳答案

只有 then 回调中的异常才会被 promise 实现捕获。如果您在 firstthrow,异常将冒泡并且只会被 try-catch 语句捕获。

这正是异步( promise 返回)函数的原因 should never throw .相反,拒绝您要返回的 promise (done.reject(…)return Q.reject(…))。如果您不信任您的功能,您可以使用 Promise.resolve().then(first).... 来启动您的链。

关于javascript - Q promise 中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35635177/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com