Javascript jQuery是确保一个函数先于所有其他函数运行的最佳方法

Javascript jQuery是确保一个函数先于所有其他函数运行的最佳方法,javascript,jquery,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

我想读一个文本文件,把它的内容放到一个变量中,然后到处使用这个变量

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
函数在其他任何操作之前运行


这与这个问题类似,但我有很多函数。我不能把它们都作为初始函数的回调。我也不愿意在所有函数中添加超时。有更好的方法吗?

您可以在get方法返回的jqXHR上使用Promise对象。例如:

var promise = $.get('/data/latest_data.txt', 'text').promise();

promise.then(function (latest_date) {
    $.getJSON('../data/' + latest_date + '/overview.json', function (data) {
        $('#overview').DataTable(data);
    });
});

您可以在get方法返回的jqXHR上使用Promise对象。例如:

var promise = $.get('/data/latest_data.txt', 'text').promise();

promise.then(function (latest_date) {
    $.getJSON('../data/' + latest_date + '/overview.json', function (data) {
        $('#overview').DataTable(data);
    });
});

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

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

var latest_date = "";
$.get('/data/latest_data.txt', function(data) {
  latest_date = data; // eg "20180102"
   window.dispatchEvent(new Event('content:loaded'))
}, 'text');
侦听事件以调用其他GET

window.addEventListener('content:loaded', function() {
   $.getJSON('../data/' + latest_date + '/overview.json', function(data){
      $('#overview').DataTable(data);
   });
});
如果您想避免使用全局变量,也可以在事件中发送
最新\u日期
变量:

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

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

阅读有关事件的更多信息

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

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

var latest_date = "";
$.get('/data/latest_data.txt', function(data) {
  latest_date = data; // eg "20180102"
   window.dispatchEvent(new Event('content:loaded'))
}, 'text');
侦听事件以调用其他GET

window.addEventListener('content:loaded', function() {
   $.getJSON('../data/' + latest_date + '/overview.json', function(data){
      $('#overview').DataTable(data);
   });
});
如果您想避免使用全局变量,也可以在事件中发送
最新\u日期
变量:

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

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

阅读有关事件的更多信息

其他函数是否真的需要在文档中执行。准备就绪,或者它们可以在以后运行?另外,为什么不将第二个函数封装在第一个函数中?从你提出的逻辑来看,它们为什么需要分开是毫无意义的。@Tiramonium,我认为是的,只要它们运行。我是web开发人员,这些函数只是从软件包教程中复制的。@Tiramonium,我只是将第一个函数作为变量定义的一部分。然后,该全局变量被用作到处使用的包共享变量。听起来javascript承诺是您所追求的。其他函数真的需要在
文档中执行吗?准备好了吗?或者可以在以后运行吗?另外,为什么不将第二个函数封装在第一个函数中?从你提出的逻辑来看,它们为什么需要分开是毫无意义的。@Tiramonium,我认为是的,只要它们运行。我是web开发人员,这些函数只是从软件包教程中复制的。@Tiramonium,我只是将第一个函数作为变量定义的一部分。然后,该全局变量被用作所有地方都使用的包共享变量。听起来javascript承诺就是你所追求的。同意…最好的解决方案和它的初衷是延迟对象。同意…最好的解决方案和它的初衷是延迟对象。。