javascript - 如何清理 AJAX 回调

标签 javascript jquery html ajax

我想要进行一个 API 调用,打印出从 2 个辅助 API 调用中检索到的值。

参见:

function api_call() {
  $.ajax({
      url: "...", 
      success: function (objects) {
          for (var i = 0; i < objects.length; i++) {
              var id_1 = api_helper1(objects[i].id_1);
              var id_2 = api_helper2(objects[i].id_2);

              console.log(id_1 + id_2);
          }
      }
  });
}

function api_helper1(id_1) {
  $.ajax({
      url: "...", 
      success: function (value) {
          return value;
      }
  });
}

function api_helper2(id_2) {
  $.ajax({
      url: "...", 
      success: function (value) {
          return value;
      }
  });
}

此处的问题是 AJAX 是异步的,因此 api_helper1 和 api_helper2 将在控制台记录 id_1 + id_2 之前运行。无需在彼此的成功函数中进行多个 AJAX 调用,最简洁的方法是什么?

最佳答案

您可以使用 Promise 来做到这一点:

function api_call() {
  return $.ajax({
      url: "...",
  });
}

function api_helper1(id_1) {
  return $.ajax({
      url: "..."
  });
}

function api_helper2(id_2) {
  return $.ajax({
      url: "..."
  });
}

api_call().done((objects)=>{
    for (var i = 0; i < objects.length; i++) {
        $.when(api_helper1(objects[i].id_1), api_helper2(objects[i].id_2)).then((id_1, id_2)=>console.log(id_1 + id_2));
    }
})

关于javascript - 如何清理 AJAX 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45849096/

相关文章:

javascript - Div 不能正常扩展

javascript - jQuery.each() 在 Firefox 和 IE 中不起作用?

jquery - 欧芹远程替换默认错误消息

JavaScript 切换脚本

javascript - 提交表单无需重新加载

html - 为什么是:hover and href links not working in my unordered css list?

javascript - 获取未知选项 : '-p' while running yarn build:prod Angular 6

javascript - 具有固定间隔的谷歌可视化折线图

javascript - 从 React Native 中的错误对象获取堆栈数据 - Expo - CRNA

jquery - 光滑的旋转木马 : Pause the Slick autoplay when youtube video is playing