推迟退货声明

cie*_*bor 5 javascript jquery asynchronous return

可能重复:
使用jQuery的JavaScript异步返回值/赋值

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

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
}
Run Code Online (Sandbox Code Playgroud)

然后我意识到,由于JaavScript的同步性,它会返回undefined.我应该如何表达退货声明Chart

Com*_*eek 6

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);

  });
}
Run Code Online (Sandbox Code Playgroud)

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

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

警告:不建议使用此方法!它会阻止整个UI,所有其他JavaScript和计时器,直到请求完成!

  • 如果您打算建议`async:false`,请勾勒,压力和**大胆**这样做的缺点. (2认同)