【发布时间】:2014-02-02 10:03:31
【问题描述】:
使用 JQuery.Deferred 时可以直接调用 reject() 吗?没有调用异步函数?
也许我想在我的异步函数开始时进行某种测试。如果测试失败,我想立即拒绝。请参阅下面的第一个 if 块。
function doSomethingAsync() {
//Test if the ajax call should be invoked
var testFailed = true;
var dfd = $.Deferred();
//Check if test failed
if (testFailed) {
var asyncResult = {
success: false,
data: 'test failed'
};
//Is this OK usage of reject on the same thread?
dfd.reject(asyncResult);
return dfd.promise();
}
$.get('/api/testapi/get').done(function (data) {
var asyncResult = {
success: true,
data: data
};
dfd.resolve(asyncResult);
}).fail(function (err) {
var asyncResult = {
success: false,
data: err
};
dfd.reject(asyncResult);
});
return dfd.promise();
}
【问题讨论】:
-
是的,当您想拒绝时,可以拨打
reject。事实上,这也是这种方法存在的一个原因。您仍然希望您的doSomethingAsync返回承诺对象,因此您的方法是可以的。在这种情况下,doSomethingAsync().fail(callback)将始终按预期工作。 -
@dfsq 您不想对答案发表评论吗? :)
-
谢谢。我想我不知道/理解 Deferred 对象是如何工作的。在返回承诺之前调用拒绝似乎很奇怪,但我可以 =)
标签: javascript jquery jquery-deferred