在加载第一个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
,所以要小心。。。