gpt4 book ai didi

javascript - 我是否应该始终调用 JQuery Deferred.resolve 或 Deferred.reject?

转载 作者:行者123 更新时间:2023-11-28 08:39:29 25 4
gpt4 key购买 nike

如下代码,它只处理ajax调用成功的情况,如果ajax调用失败,它会被忽略,并且deferred.reject()永远不会被调用。那么如果遇到失败的情况,jQuery内部的事件监听器是否会永远保留而导致内存泄漏呢?

$.when(loadSomething).done(function() {
// ...
});

function loadSomething() {
var deferred = $.Deferred();

// Only deal with the success case,
// If the ajax call failed, it is ignored and the deferred.reject() will never be invoked.
// So if we meet the failed case, will there any event listener inside jQuery will be keeped
// forever?
ajaxCallToLoad(onResult);

function onResult() {
deferred.resolve();
}

return deferred.promise();
}

最佳答案

So if we meet the failed case, will there any event listener inside jQuery will be keep forever to cause memory leak?

几乎肯定不会。

但是如果你这样做,你就显式地使用了 Promise 语义,但却违反了 Promise 契约。这是不好的做法。您必须选择“最佳实践”:

  1. 继续使用 promise ,但遵守契约(Contract)。更新ajaxCallToLoad,以便它也通知您失败,并在发生这种情况时在您的延迟上调用reject。 (如果 ajaxCallToLoad 使用 jQuery 的 $.ajax 函数,您可以只使用 $.ajaxjqXHR 对象返回;它实现了 Promise。)

  2. 如果您不想履行 promise 契约(Contract),只需使用普通的“成功”回调而不是 promise 。

关于javascript - 我是否应该始终调用 JQuery Deferred.resolve 或 Deferred.reject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20672972/

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