Javascript 当两个单独的Ajax调用完成时,调用函数的好方法是什么?

Javascript 当两个单独的Ajax调用完成时,调用函数的好方法是什么?,javascript,jquery,ajax,Javascript,Jquery,Ajax,因此,我有一些类似于以下简化版本的JS: var MyAjax = $.ajax({ url: 'api/myApi', type: "POST", data: myData, dataType: "json", success: function (data) { if (condition) { var weightCounts = $.ajax({ url: 'api/myApi

因此,我有一些类似于以下简化版本的JS:

var MyAjax = $.ajax({
    url: 'api/myApi',
    type: "POST",
    data: myData,
    dataType: "json",
    success: function (data) {
        if (condition) {
            var weightCounts = $.ajax({
                url: 'api/myApi',
                type: "POST",
                data: myConditionalData,
                dataType: "json",
                success: function (conditionalData) {
                    MyExternalMethod(data, conditionalData)
    }
});
基本上我有两个Ajax调用。我有一个可以检索一些数据,第二个可以在启用附加设置时检索一些数据。条件调用嵌套在主调用的成功事件中的原因是,MyExternalMethod()的参数是由这些调用生成的,因此它们都需要完成

但是从概念上讲,这些调用彼此完全独立,并且条件调用不需要等待初始调用的成功事件,这正是我在编写代码时想到的最好的方法。我想重构它来修复等待第一个请求执行条件的缓慢性,但我不确定最好的方法是什么

到目前为止,我最好的想法是:

var firstData = null;
var secondData = null;

var MyFirstAjax = $.ajax({
    url: 'api/myApi',
    type: "POST",
    data: myData,
    dataType: "json",
    success: function (data) {
        firstData = data;
        if (secondData){
            MyExternalMethod(firstData, secondData)
        }

});

var MySecondAjax = $.ajax({
    url: 'api/myApi',
    type: "POST",
    data: myData,
    dataType: "json",
    success: function (data) {
        secondData = data;
        if (firstData){
            MyExternalMethod(firstData, secondData)
        }
});
除了使用这些变量作为标志外,还有其他标准方法吗?就JS的工作方式而言,我习惯于按部就班,但我正在尝试编写更干净、更面向标准的代码,因此我想知道是否有比上述方法更有利的方法(或者上述方法是否有我没有看到的任何主要缺点)

谢谢

您可以使用

你可以用


简短回答:像
async.js
这样的库会有所帮助

详细回答:有几种方法可以解决这个问题

基本上,两个ajax都需要在
成功:
上触发相同的回调,比如
函数检查\u ajax()
,它检查
第一数据和
第一数据是否可用。如果是,请调用MyExternalMethod


一个很好的参考:

简短回答:像
async.js
这样的库会有所帮助

详细回答:有几种方法可以解决这个问题

基本上,两个ajax都需要在
成功:
上触发相同的回调,比如
函数检查\u ajax()
,它检查
第一数据和
第一数据是否可用。如果是,请调用MyExternalMethod


一个很好的参考资料:

我想你想用这个看起来也很有趣:对不起,我没有用过这些,我只知道它们。我只是想给你指出一个方向,希望我能帮你更多。这个例子正好说明了你的问题。我想你应该用这个看起来也很有趣:对不起,我没有用过这些,我只是知道而已。我只是想给你指出一个方向,希望我能帮你更多。这个例子正好说明了你的问题,真不敢相信我以前不知道。这太棒了。我总是在完整的语句中设置自己的布尔值。这是更优雅的方式。我假设这会和其他语句一起工作,比如$.post和$.get?是的,我相信会的。它适用于任何承诺。一个警告是,如果其中一个承诺被拒绝,那么整个承诺都会被拒绝(失败)。如果你不想有这种行为的话,还有更多的工作要做才能摆脱它。真不敢相信我以前不知道这件事。这太棒了。我总是在完整的语句中设置自己的布尔值。这是更优雅的方式。我假设这会和其他语句一起工作,比如$.post和$.get?是的,我相信会的。它适用于任何承诺。一个警告是,如果其中一个承诺被拒绝,那么整个承诺都会被拒绝(失败)。如果你不想要这种行为,还有更多的工作要做。
var MyFirstAjax = $.ajax({
    url: 'api/myApi',
    type: "POST",
    data: myData,
    dataType: "json"
});

var MySecondAjax = $.ajax({
    url: 'api/myApi',
    type: "POST",
    data: myData,
    dataType: "json"
});

$.when(MyFirstAjax, MySecondAjax).then(function (firstResult, secondResult) {
    var firstData = firstResult[0];
    var secondData = secondResult[0];
    MyExternalMethod(firstData, secondData)
});