jQuery确保一个函数在所有其他函数之前运行的最佳方法

时间:2018-03-03 12:49:32

标签: javascript jquery

我想阅读一个文本文件并将其内容发送到变量并在任何地方使用该变量。

var latest_date = "";
$.get('/data/latest_data.txt', function(data) {
  latest_date = data; // eg "20180102"
}, 'text');

// and lots of similar functions like this
$(function() {
  $.getJSON('../data/' + latest_date + '/overview.json', function(data){
    $('#overview').DataTable(data);
  });
});

但是,其他函数将在latest_date变量获得正确值之前运行。如何确保$.get函数先运行?

它类似于这个问题How should I call 3 functions in order to execute them one after the other? 但我有很多功能。我不能将它们全部作为初始函数的回调。我也不愿意为所有功能添加timeOut。还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用一个事件然后附加多个侦听器来调用文件加载后需要调用的函数:

第一个请求完成时window对象上的Dispatch事件:

var latest_date = "";
$.get('/data/latest_data.txt', function(data) {
  latest_date = data; // eg "20180102"
   window.dispatchEvent(new Event('content:loaded'))
}, 'text');

听取事件来调用另一个获取。

window.addEventListener('content:loaded', function() {
   $.getJSON('../data/' + latest_date + '/overview.json', function(data){
      $('#overview').DataTable(data);
   });
});

如果您想避免使用全局变量,也可以在事件中发送latest_date变量:

window.dispatchEvent(new CustomEvent('content:loaded', {
    detail: {
        latest_date: 'date',
    }
}));

window.addEventListener('content:loaded', function(e) {
    console.log(e.detail.latest_date); // = 'date'
});

详细了解活动here

相关问题