gpt4 book ai didi

javascript - deferred.fail()后如何继续执行JS

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

下面是一些代码,它采用 Backbone 模型,保存它,然后等待响应并触发 jQuery .done() 或 .fail() 代码。这工作正常,但在失败时,我们实际上希望从服务获取返回的消息,并将其添加到我们的错误对象中。这一切都在 Backbone validate() 函数内;在此代码之后,我们检查错误对象并显示消息(如果有)。

看起来如果我们 .fail(),一切都会停止执行。我们需要继续验证功能。我找到了这个问题/答案,但似乎没有什么区别:Is there a way to continue after one deferred fails?

有什么方法可以在遇到 deferred.fail() 后继续执行代码吗?

addressModel.save().done(function() {
console.log("promise done");
model.set("...", false);
}).fail(function(response) {
console.log("promise fail");
if (response.responseJSON && response.responseJSON._messages) {
_.each(response.responseJSON._messages, function(value, key) {
errors[key] = value[0];
});
}
});

最佳答案

这是可能的,但很棘手 - 至少在 3.0 之前是这样。诀窍是:

  • 不要使用.fail,使用.then
  • 返回已解决的失败延迟。

这就像表明我们已经处理了这里遇到的异常:

var p = addressModel.save().then(function() {
console.log("promise done");
model.set("...", false);
}, function(response) {
console.log("promise fail");
if (response.responseJSON && response.responseJSON._messages) {
_.each(response.responseJSON._messages, function(value, key) {
errors[key] = value[0];
});
}
return $.Deferred().resolve(); // return a resolved deferred
});

这会让你做:

p.then(function(){
// this code runs when either failure or success happened, can also chain
});

关于javascript - deferred.fail()后如何继续执行JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29526281/

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