gpt4 book ai didi

node.js - 如何触发带有嵌套 promise 的单个错误处理程序?

转载 作者:搜寻专家 更新时间:2023-10-31 22:52:48 27 4
gpt4 key购买 nike

为什么任何 deferred.reject() 调用都不会在最后触发 .fail() 处理程序?如何触发带有嵌套 promise 的单个错误处理程序?我需要闭包的嵌套 promise 。

当我在 d1 上触发拒绝时,它仍然一直到 d2 的解决/拒绝。如果我将 .fail() 添加到 d1 的 block 中,那么它会捕获到拒绝。但这是我试图避免的,每个嵌套 promise 的 .fail() 处理程序。

var Q = require('q');

somePromise().then(function (v1) {

var d1 = Q.defer();

asyncFunc1(v2, function (err, v3) {
if (!v3)
d1.reject(new Error('error'));
else
d1.resolve(true);

return d1.promise.then(function (promise1Kept) {
var d2 = Q.defer();
asyncFunc2(v4, function (err, v5) {
if (!v5)
d2.reject(new Error('error'));
else
d2.resolve(true);
});
return d2.promise.then(function (promise2Kept) {
console.log('end of promise chain');
});
});
});
}).fail(function (err) {
console.log('Error!');
console.log(err);
});

最佳答案

不要混合回调和 promise 或使用延迟。正如您所注意到的,当您需要手动执行所有操作时,很容易把链弄乱。

var Q = require('q');
var func1 = Q.denodeify(asyncFunc1);
var func2 = Q.denodeify(asyncFunc2);

somePromise().then(function (v1) {
return func1(v2);
}).then(function (v3) {
if (!v3) throw new Error("error");

return func2(v4);
}).then(function (v5) {
if (!v5) throw new Error("error");

console.log("end of promise chain");
}).fail(function (err) {
console.log('Error!');
console.log(err);
});

关于node.js - 如何触发带有嵌套 promise 的单个错误处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20184760/

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