【问题标题】:Defering return statement [duplicate]推迟退货声明[重复]
【发布时间】:2012-01-02 09:12:06
【问题描述】:

可能重复:
JavaScript asynchronous return value / assignment with jQuery

我需要一个带有构造函数的图表原型,所以我写了这个:

function Chart(file) {
  var chart = undefined

  $.getJSON(file, function(data) {

    chart = {
      categories: data.keys
      series: [{
          name: 'first',
          data: data.first
        }, {
          name: 'second',
          data: data.second
      }]
    }

  });

  return chart
}

然后我意识到,由于 JaavScript 的同步性,它返回 undefined。我应该如何推迟Chart的return语句?

【问题讨论】:

    标签: javascript jquery asynchronous return


    【解决方案1】:

    1.) 指定回调函数

    function Chart(file, callback) {
      var chart = undefined
    
      $.getJSON(file, function(data) {
    
        chart = {
          categories: data.keys
          series: [{
              name: 'first',
              data: data.first
            }, {
              name: 'niewykopane',
              data: data.first
          }]
        }
        callback(chart);
    
      });
    }
    

    2.) 同步请求(不推荐!)

    您可以使用$.ajax() 并将async 属性设置为false

    警告:此方法不推荐!它会阻塞整个 UI、所有其他 JavaScript 和计时器,直到请求完成!

    【讨论】:

    • 如果您要建议async:false,请概述、强调并粗体这样做的缺点。
    • 我希望有比回调更好的解决方案,因为我正在像这样初始化对象:hour_occurrences = new Highcharts.Chart(new Chart(file))。但是谢谢,它有效:)。
    猜你喜欢
    • 2016-06-23
    • 2014-03-15
    • 2012-10-04
    • 2013-07-11
    • 2011-08-10
    • 1970-01-01
    • 2022-11-18
    • 2017-06-06
    • 2013-07-13
    相关资源
    最近更新 更多