在加载第一个JavaScript函数后,使用getJSON调用第二个JavaScript函数

在加载第一个JavaScript函数后,使用getJSON调用第二个JavaScript函数,javascript,jquery,json,function,asynchronous,Javascript,Jquery,Json,Function,Asynchronous,我有多个函数,其中包含getJSON。在加载第一个函数后,我可以调用/加载第二个函数吗 现在,首先调用第二个函数,然后加载第一个函数。我是否需要完成加载第一个,然后调用第二个 我的JavaScript const functionOne = () => { $.getJSON(api, api_result => { $.getJSON(api2, api2_result => { build Highcharts });

我有多个函数,其中包含
getJSON
。在加载第一个函数后,我可以调用/加载第二个函数吗

现在,首先调用第二个函数,然后加载第一个函数。我是否需要完成加载第一个,然后调用第二个

我的JavaScript

const functionOne = () => {
   $.getJSON(api, api_result => {
      $.getJSON(api2, api2_result => {
         build Highcharts
      });
   });
}

const functionTwo = () => {
   $.getJSON(api3, ap3_result => {
     build Highcharts
   });
   $.getJSON(api3, api3_result => {
     ...doSomething
   });
}

functionOne();
functionTwo();
现在,
functionTwo()
首先加载(正在绘制高图),然后加载
functionOne()
,因为getJSON是异步的。是否有必要先在
functionOne
中绘制我的图表,然后再转到
functionTwo

像下面这样的

const functionOne = () => { $.getJSON(api, api_result => { $.getJSON(api2, api2_result => { build Highcharts }); }).done(function() { functionTwo() }) } const functionTwo = () => { $.getJSON(api3, ap3_result => { build Highcharts }); $.getJSON(api3, api3_result => { ...doSomething }); } functionOne(); 常量functionOne=()=>{ $.getJSON(api,api_结果=>{ $.getJSON(api2,api2_结果=>{ 建立高度图表 }); }).done(函数(){ 函数二() }) } 常量函数二=()=>{ $.getJSON(api3,ap3_结果=>{ 建立高度图表 }); $.getJSON(api3,api3_结果=>{ …剂量 }); } 函数一();
使用async/await,您可以确保第二部分的内容仅在functionOne完成时执行

异步函数functionOne(){
wait$.getJSON(api,异步函数(api\U结果){
等待$.getJSON(api2,api2_结果=>{
建立高度图表
});
});
}
异步函数functionTwo(){
等待$.getJSON(api3,ap3_结果=>{
建立高度图表
});
等待$.getJSON(api3,api3_结果=>{
…剂量
});
}
functionOne(),然后是functionTwo

虽然承诺很可能是实现这一点的“最佳”方法,但它们可能需要一段时间才能精通——在这种情况下,已经有了一个嵌套的ajax调用,这无疑会使问题复杂化

一个更简单、可能更容易理解的选项是传入回调:

function functionOne(callbackWhenComplete) {
   $.getJSON(api, api_result => {
      $.getJSON(api2, api2_result => {
         build Highcharts

         // Call callback, when everything else is complete
         callbackWhenComplete();
      });
   });
}

const functionTwo = () => {
   $.getJSON(api3, ap3_result => {
     build Highcharts
   });
   $.getJSON(api3, api3_result => {
     ...doSomething
   });
}

functionOne(functionTwo);
需要注意的几点:

  • 它是
    functionOne(functionTwo)
    不是
    functionOne(functionTwo())
因此,您将
functionTwo
函数本身作为回调传递,使用
functionTwo()
将首先调用functionTwo并传递结果

  • 您可以/应该在完成时检查
    回调,例如使用
if($.isFunction(callbackWhenComplete))callbackWhenComplete()

  • 在完成时,您可能需要比
    回调更好的变量名(仅作为示例)

看看或者jQuery看看这个
$.getJSON(api3,ap3_result=>{buildHighcharts;$.getJSON(api3,api3_result=>{…doSomething});})
或将第二个get放在buildHighChart的末尾虽然
承诺
是正确答案,但一个更简单、更容易理解的选项是传入回调:
functionOne(functionTwo)
然后
函数functionOne(whenDone){$.getJSON(api,function(){buildhighcharts();whenDone();}}}
当前存在的答案在调用
函数二之前都不会等待
api2
,所以要小心。。。