如何在jquery中使用承诺?

如何在jquery中使用承诺?,jquery,jquery-deferred,Jquery,Jquery Deferred,我通过多个ajax调用引入了多个div。在第一个ajax调用之前,我想显示一个加载微调器。一旦所有的div(这将需要一个未知的时间)加载完毕,我想对它们进行排序。最后,我想删除加载微调器层 我认为我需要为此使用承诺(因为有多个ajax调用),但是我不知道如何实现承诺——有人能告诉我如何编写承诺吗?如果我需要向函数添加与此相关的代码,请添加什么 多谢各位 这是我的密码: $(document.body).on('click', "#refresh_view", function(){ s

我通过多个ajax调用引入了多个div。在第一个ajax调用之前,我想显示一个加载微调器。一旦所有的div(这将需要一个未知的时间)加载完毕,我想对它们进行排序。最后,我想删除加载微调器层

我认为我需要为此使用承诺(因为有多个ajax调用),但是我不知道如何实现承诺——有人能告诉我如何编写承诺吗?如果我需要向函数添加与此相关的代码,请添加什么

多谢各位

这是我的密码:

$(document.body).on('click', "#refresh_view", function(){

    start_spinner();
    load_all_divs(list_of_ids_to_loop_over);

    // once the above is complete
    re_order_divs();

    // once the above is complete
    end_spinner();

});


load_all_divs(list_of_ids_to_loop_over) {

    $.each(list_of_application_ids.split(','), function(index){
        do_ajax_call_for_this_one_item(this)
    });
};



如果使用jQuery的
$.ajax
(或
$.get
等)加载div,则可以使用jQuery,因为它们已经返回jQuery
jqXHR
对象,如下所示:

$.when(
    $.ajax(/*...*/),
    $.ajax(/*...*/),
    $.ajax(/*...*/)
)
.done(() => {
    // All done
})
.fail(error => {
    // Something went wrong
});
如果您使用的是适度更新的jQuery版本,那么也可以使用该标准,因为现代版本的jQuery中的
jqXHR
对象是可以使用的<代码>承诺。所有接受一个数组:

Promise.all([
    $.ajax(/*...*/),
    $.ajax(/*...*/),
    $.ajax(/*...*/)
])
.then(() => {
    // All done
})
catch(error => {
    // Something went wrong
});

非常感谢。ajax调用位于load_all_divs()中的.each循环中,
load_all_divs(从\u id_到\u loop_over的列表){$。each(从\u应用程序\u id.split(',')、函数(索引){do_ajax_调用\u for_this_one_item(this)}Promise.all
Promise.all(列出应用程序ID.split(',').map(do_ajax_call_for_this_one_item))。然后(function(){/*…all done…*/}.catch(function(error){/*…handle/report error…*/})谢谢TJ-不幸的是,我不知道如何将ajax调用的结果保存到数组中。我希望我可以保持load_all_divs()的原样,因为上面的代码要复杂得多(但可能会添加一个promise对象?),并重写触发的代码,然后单击事件发生以使用promises。。很抱歉,我的javascript相当初级