我在JQuery中使用事件在不同的JavaScript模块之间进行通信。因此,在一个模块中我有这样的事情:在完成之前JQuery - 防止触发多个事件
$(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);
});
所以我想在执行过程中把回调关闭。不幸的是,上述方法不起作用。什么是正确的方法来做到这一点?
嗯......“'fetchData'花费很长的时间” ......我们继续在这之前,可以请你,你是不是用同步请求,向我保证? – Katana314
我正在使用JQuery的'getJSON()'来获取数据,我没有发现它的文档中是否是异步的,但我假设它是因为它与外部联系。 – qiubit
对于Howard的回答,您可以将函数的内容封装在if语句中,该语句检查全局变量,如果(!fetching){fetching = true; ...}并在fetchData完成时将读取设置为false。 – DrunkWolf