我使用JQuery中的事件在不同的JavaScript模块之间进行通信。所以在其中一个模块中我有这样的东西:
$(window).on('updateStatusRequest', function(ev) {
// Send updateStatus event after fetching data
data = fetchData();
$(window).trigger('updateStatus', data);
});
此数据提取可能会持续很长时间(它会在外部发送HTTP请求),然后才能完成。这是我现在正在考虑的一个问题 - 如果有很多“updateStatusRequest”,那该怎么办呢?触发并且该功能还没有获取数据?在这种情况下,我想防止多次数据提取,所以我想到这样的事情:
$(window).on('updateStatusRequest', function(ev) {
$(window).off('updateStatusRequest', this);
// Send updateStatus event after fetching data
data = fetchData();
$(window).trigger('updateStatus', data);
$(window).on('updateStatusRequest', this);
});
所以我想在执行期间关闭回调。不幸的是,上面的方法不起作用。这样做的正确方法是什么?
答案 0 :(得分:2)
重新添加事件处理程序时需要回调。这样的事情应该有效:
$(window).on('updateStatusRequest', function(ev) {
newFunction();
});
var newFunction = function (){
$(window).off('updateStatusRequest');
data = fetchData();
$(window).trigger('updateStatus', data);
$(window).on('updateStatusRequest', function (){
newFunction();
});
}
虽然,我可能会使用一个承诺而不是添加/删除事件处理程序......
答案 1 :(得分:0)
使用JQuery.ajax并关闭异步