gpt4 book ai didi

javascript - JQuery 延迟立即拒绝

转载 作者:数据小太阳 更新时间:2023-10-29 04:09:07 27 4
gpt4 key购买 nike

在使用 JQuery.Deferred 时可以直接调用 reject() 吗?没有调用异步函数?

也许我想在异步函数的开头进行某种测试。如果测试失败我想立即拒绝。请参阅下面的第一个 if block 。

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();
}

最佳答案

When using JQuery.Deferred is it OK to invoke reject() directly? Without having invoked a async function?

是的,返回一个已经被拒绝的 promise 并立即拒绝 deferred 是完全可以的。您可能只需要验证您的回调不依赖于异步解析,jQuery 不保证这一点(与 A+ implementations 相比)。

请注意,在您的代码中,您应该使用 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
};
});
}

关于javascript - JQuery 延迟立即拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21509278/

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