javascript - 如何在 Javascript 中排序递归回调?

标签 javascript callback

我需要执行3个ajax请求。我知道默认情况下它们恰好是异步的(并且使它们同步会弄乱虚拟机,所以我不想这样做。)我这样做的方法是调用一个函数三次传递变量。

result = '';
parse(var1);
parse(var2);
parse(var3);
view();

function parse(variable) {
    //ajax request here
    $.ajax({
        type: 'POST',
        url: 'script.php',
        data: {variable: variable},
        success: function (data) {
            //result stored in a global variable
            result += data;
        }
    });
}
function view() {
    //do something with result
}

但现在,当结果未完成时, view() 会立即触发。我如何设置它们一个接一个地发生?我读到了有关回调的内容,但它们非常令人困惑,因为我没有 3 个不同的函数,而只有一个采用不同的变量。

最佳答案

您可以将变量存储在数组中并使用函数来进行 ajax 调用:

var variables = [var1, var2, var3];

function callParse() {
  if(variables.length) {
    var currentVar = variables.shift();
    parse(currentVar);
  }
  else {
    view();
  }
}

function parse(variable){
  //ajax request here
  $.ajax({
    type:"POST",
    url:'script.php',
    data:{variable:variable},
    success:function(data)
    {
      result+=data;
      callParse();
    }
  });
}

function view(){
//do something with result
}

关于javascript - 如何在 Javascript 中排序递归回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37870188/

相关文章:

javascript - 我如何扩展 $.browser

javascript - 如何让 element.querySelector() 包含根元素?

javascript - 异步加载 javascript,然后在执行回调之前检查加载的 DOM

c++ - 使用 SWIG 用虚拟方法包装 C++ 类并在 python 中覆盖它们

javascript - 防止 map 区域点击重新加载页面

javascript - 如何在纯JS中的一行后插入一组表行

javascript - 如何通过 JavaScript 中的回调避免堆栈蠕变?

javascript - 为什么回调总是作为最后一个参数传递 JavaScript

keras - tf.keras 如何保存 ModelCheckPoint 对象

javascript - 使用 Clip 函数在 Canvas 上使用 JavaScript 实现渐变效果