Javascript 如何在ajax响应中对多个函数使用回调

Javascript 如何在ajax响应中对多个函数使用回调,javascript,jquery,Javascript,Jquery,我的javascript代码加载程序隐藏有一个问题,但它应该在jax响应的最后一个阶段隐藏 function reverseGeocoding(lat,lng, callback){ var url = 'http://open.mapquestapi.com/nominatim/v1/reverse?format=json&lat=' + lat + '&lon=' +lng+' &zoom=18&addressdetails=1'; $.aja

我的javascript代码加载程序隐藏有一个问题,但它应该在jax响应的最后一个阶段隐藏

function reverseGeocoding(lat,lng, callback){
    var url = 'http://open.mapquestapi.com/nominatim/v1/reverse?format=json&lat=' + lat + '&lon=' +lng+' &zoom=18&addressdetails=1';
    $.ajax({
        url: url,                       
        crossDomain:true,
        success: function(response){
               fn1(response,mapobject);   //takes 30 seconds
               fn2(response,mapobject);   //takes 10 seconds
               fn3(response,mapobject);   //takes 30 seconds
               fn4(response,mapobject);   //takes 20 seconds
               fn5(response,mapobject);   //takes 30 seconds
               fn6(response,mapobject);   //takes 30 seconds
               fn7(response,mapobject);   //takes 40 seconds
               $("#loader").show();

        }
    });

}
但问题是加载程序在响应到来后显示。我想在所有函数调用fn1、fn2、fn3、fn4、fn5、fn6、fn7之后显示加载程序。请帮助

您可以使用,尤其是和。假设在所有函数中都执行
$.ajax
请求,它们应该如下所示:

function f1() {
    return $.ajax({
        url: "someUrl",
        success: function (data) {
            console.log("f1 done")
        }
    });
}
此函数将返回一个
承诺
,然后可以使用
$将其放置在回调中。当

 $.when(f1(), f2(), f3()).then(function () {
     console.log("all done!");
 });

您可以使用,尤其是和。假设在所有函数中都执行
$.ajax
请求,它们应该如下所示:

function f1() {
    return $.ajax({
        url: "someUrl",
        success: function (data) {
            console.log("f1 done")
        }
    });
}
此函数将返回一个
承诺
,然后可以使用
$将其放置在回调中。当

 $.when(f1(), f2(), f3()).then(function () {
     console.log("all done!");
 });

您可以使用jquery延迟对象


您可以使用jquery延迟对象


setTimeout或将自定义函数编码为每个函数都有一个回调并调用下一个函数。显然,最后调用show方法;在结尾处的fn7函数内部感谢francisco.preller的回复,但我知道我必须使用calback,但我不知道如何在多个函数complete上使用它。因此基本上,fn1、fn2等函数是异步的,您需要$('#loader')。show()要在它们全部返回后运行?@SAM这不是最佳答案我必须使用callback。设置timeout或将自定义函数编码为每个函数都有一个回调并调用下一个函数。显然,最后调用show方法;在结尾处的fn7函数内部感谢francisco.preller的回复,但我知道我必须使用calback,但我不知道如何在多个函数complete上使用它。因此基本上,fn1、fn2等函数是异步的,您需要$('#loader')。show()在他们都回来后再跑?@SAM这不是最好的回答,我必须使用callback。