[英]Call second JavaScript function with getJSON after first one is loaded
我有多个具有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();
现在,由于getJSON是异步的,因此首先加载functionTwo()
(绘制高图),然后再加载functionOne()
。 无论如何,有没有要先在functionOne
绘制高图,然后再转到functionTwo
?
基于https://api.jquery.com/jQuery.getJSON/
类似于以下内容?
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();
使用async / await,您可以确保仅在functionOne完成时执行第二部分的内容
async function functionOne () { await $.getJSON(api, async function(api_result) { await $.getJSON(api2, api2_result => { build Highcharts }); }); } async function functionTwo () { await $.getJSON(api3, ap3_result => { build Highcharts }); await $.getJSON(api3, api3_result => { ...doSomething }); } functionOne().then(functionTwo);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
虽然Promise最有可能是“最佳”方法,但他们可能需要一段时间才能精通-在这种情况下,已经存在嵌套的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并将结果传递
callbackWhenComplete
是否已通过,例如使用 if ($.isFunction(callbackWhenComplete)) callbackWhenComplete()
callbackWhenComplete
更好的变量名(仅作为示例)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.