我有一个简单的JQuery事件处理程序,在提交表单时会触发。
$('.selector').on('submit', function(e) {
e.preventDefault();
submitForm(status).then(updateData());
});
我正在尝试添加取消第二个呼叫的功能,如果第一个呼叫满足某个条件但我无法使其正常工作。我发现了这个问题,但由于某种原因,第二个函数在返回reject()
时仍然执行。 Rejecting A jQuery Promise In A $.ajax Success Method
function submitForm(status) {
return $.ajax({
method: "POST",
url: "/url/to/use",
data: formData,
dataType: "json",
contentType: false,
processData: false
}).then(function(data) {
if (data.error === true) {
return new $.Deferred().reject().promise();
} else {
// do other stuff
}
});
}
我是否需要创建一个延迟对象并将其返回,或者只需调用then()
即可完成?我已经阅读了很多关于延期和承诺的内容,但仍然无法理解它们是如何工作的。
答案 0 :(得分:0)
我是否需要创建一个延迟对象并将其返回,或者只是通过调用then()来完成它?我已经阅读了很多关于延期和承诺的内容,但仍然无法理解它们的工作原理。
这是jQuery的问题<承诺3。在jQuery 3中,链接问题已得到解决,您可以throw
发出错误信号。
在提交表单后,您的代码实际上并未调用updateData
,您需要将其传递给函数,并且您将传递给它一个承诺。一个更好的承诺库(如蓝鸟)或类型检查器(如TypeScript)会告诉你:)
submitForm(status).then(updateData); // pass the function, don't invoke