gpt4 book ai didi

javascript - 如何停止 JQuery 的 $.Deferred() 中的错误传播?

转载 作者:行者123 更新时间:2023-11-30 00:28:00 25 4
gpt4 key购买 nike

我以为 fail() 会停止错误传播,但这似乎并没有发生。这是我拥有的:

someAsynTask()
.then(function(){
1/0;
})
.fail(function(){
console.log('Error handled.');
})
.then(function(){
console.log('test'); // not printed (expected it to print)
})
.fail(function(){
console.log('More errors?'); // printed (nor expecting it to print)
});

如何让 fail() 捕获错误以防止它沿着 promise 链传播?

最佳答案

jQuery 的两件事,最高 2.x。

  • promises 不是“扔安全的”
  • .fail() 处理程序的存在不会导致下游 promise 被标记为“已处理”。

只有 .then() 具有“过滤”功能,但即使使用 .then(),过滤也不是自动的。

从 3.0 开始,我们被告知 jQuery promises 将符合 promises/A+ 标准。

1.x 和 2.x 的行为是完全可以预测的,甚至是讨人喜欢的,只是与 A+ 不同。以下代码应提供您所期望的行为:

someAsynTask().then(function(){
try {
1/0;
} catch(e) {
return $.Deferred().reject(e).promise(); // Returning a rejected promise from a then()'s success handler is the only way to transmogrify success into failure. An uncaught `throw` does not have the same effect in jQuery 1.x and 2.x.
}
}).then(null, function(){
var message = 'Error handled';
console.log(message);
return $.when(message); //Returning a resolved promise from a then()'s fail handler is the only way to transmogrify failure into success in jQuery 1.x and 2.x.
}).then(function(msg) {
console.log(msg); // should print 'Error handled' again
}).fail(function() {
console.log('More errors?'); // should not print. Also, no filtering here. `.fail()` does not possess filtering power.
});

关于javascript - 如何停止 JQuery 的 $.Deferred() 中的错误传播?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30703045/

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