当使用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();
}
发布于 2014-02-02 15:12:42
当使用JQuery.Deferred时,直接调用reject()可以吗?而没有调用异步函数?
是的,返回一个已经被拒绝的承诺和立即拒绝延期是完全可以的。您可能只需要验证您的回调不依赖异步解析,而jQuery并不保证这一点(与A+实现相反)。
注意,在您的代码中,您应该使用then
,而不是手动解析延迟的:
function doSomethingAsync() {
var testFailed = /* Test if the ajax call should be invoked */;
var dfd = testFailed
? $.Deferred().reject('test failed')
: $.get('/api/testapi/get');
return dfd.then(function (data) {
return {
success: true,
data: data
};
}, function (err) {
return {
success: false,
data: err
};
});
}
发布于 2019-10-09 10:16:29
您可以快速完成此操作,因为您的函数返回了一个诺言对象:
return Promise.reject('test failed');
https://stackoverflow.com/questions/21509278
复制相似问题