【问题标题】:Sequentially execute two functions with jQuery in for loops在for循环中使用jQuery顺序执行两个函数
【发布时间】:2017-06-28 01:25:40
【问题描述】:

我对 Javascript 还是很陌生。请不要太苛刻:)

我有两个函数,这两个函数都涉及在 for 循环中执行 jQuery 请求。例如,

function a(n,locations) {
  for (var i = 0; i < n; i ++) {
    $.ajax({
      url: 'https://geocoder.cit.api.here.com/6.2/geocode.json',
      type: 'GET',
      dataType: 'jsonp',
      jsonp: 'jsoncallback',
      data: {
        searchtext: input,
        app_id: APP_ID,
        app_code: APP_CODE,
      },
      success: function (data) {
        handleData(data,locations);
      }
   });
 }

handleData() 函数将从 jQuery 数据中更改空数组 locations。我的函数b(m) 的格式类似,但会使用更新后的位置作为输入。

现在,我有一个c(n,m),我想在其中依次执行a()b()

function c(n,m) {
  var locations = [];
  a(n,locations);
  b(m,locations);
}

从以前的答案中,我了解到可以通过使用承诺(例如.then)来实现涉及 jQuery 调用的顺序执行函数。但是这个方案只适用于a(n)返回promise的情况,在for循环结构下是无法实现的。您能否分享您对如何解决此问题的见解?提前感谢您的帮助。

【问题讨论】:

  • 你不是已经在依次运行你的两个函数了吗?函数c 将运行aa 将通过for 循环,然后一旦for 循环完成,b 将启动。这不是你想要的吗?
  • @ObsidianAge 抱歉,我不清楚。在a 中,我想更新一个数组locations,我想在b 中使用它的更新版本。
  • 如果这能解决您的问题,请告诉我。

标签: javascript jquery ajax asynchronous


【解决方案1】:

我会建议 recursion 而不是你的 for 循环。比如可以这样调用函数recursionExample

function a(n) { 
  return new Promise ((resolve, reject) {
    (function recursionExample(a) { 
      if (a === n) {
          resolve;
      } else {
          $.ajax({ url: 'https://geocoder.cit.api.here.com/6.2/geocode.json', 
          type: 'GET', 
          dataType: 'jsonp', 
          jsonp: 'jsoncallback', 
          data: { 
              searchtext: input, 
              app_id: APP_ID, 
              app_code: APP_CODE, 
          }, 
          success: function(data) { 
            handleData(data);
            recursionExample(a + 1);
          } 
        }); 
      }
    })(0);
  });
}

这将允许您使用promise.then 函数。就这样……

function c(n,m) { 
    var locations = []; 
    a(n,locations)
    .then (function() {
        b(m,locations); 
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 2020-05-27
    • 2020-04-09
    • 2014-05-29
    • 1970-01-01
    • 2019-04-13
    相关资源
    最近更新 更多