首页 > 解决方案 > 如何根据变量运行功能未知的次数?

问题描述

我正在尝试创建一个从端点检索数据的 Javascript API 函数。这里的问题是它返回的最大数量为 1000 条记录,总记录量可达 300.000 条记录。所以我需要循环这个 API 函数,并在start每次运行时不断地将“1000”添加到变量中。因此,该函数将继续获取记录,直到达到未知的记录总数。假设这个例子有 300.000。然后它应该循环 300 次。

API 和一切都运行良好。start我唯一的问题是,每次运行后,我的变量都不会为自身添加 1000。它应该将 1000 添加到变量本身,然后再次运行,以检索下 1000 条记录。

这是我的功能:

function loopFunction() {
  function getResponse() {

    if (typeof counter === undefined || counter === null) {
      var start = 0;
    }

    var response = UrlFetchApp.fetch("https://www.apiurl?start=" + start + "&limit=1000&access_token=xxx");

    // Parse data to JSON and get total
    var fact = response.getContentText();
    var data = JSON.parse(fact);

    // Retrieve start number and count
    var start = data.start += 1000;
    var count = data.count;

    var runAgain = count + start;
    var counter = 1;

    return runAgain;

  }
  var runAgain = getResponse();

  console.log(runAgain);

  loopFunction();
}
}

当我运行这个函数时,数据被检索并且循环部分工作。唯一的问题是console.log(runAgain);不断返回 1000 而不是 1000、2000、3000、4000、5000 等。有谁知道如何解决这个问题?

标签: javascript

解决方案


您需要将函数外部的 start/counter 声明为全局。并在内部使用相同的变量并根据需要更新开始/计数器。如果达到最后一个或未知数量,还添加一个条件检查 data.count 以退出循环

var start;
var counter;

function loopFunction() {
  function getResponse() {

    if (counter === 'undefined' || counter === null) {
      start = 0;
    }

    var response = UrlFetchApp.fetch("https://www.apiurl?start=" + start + "&limit=1000&access_token=xxx");

    // Parse data to JSON and get total
    var fact = response.getContentText();
    var data = JSON.parse(fact);

    // Retrieve start number and count
    start += 1000;
    var count = data.count;
    var currentStart = data.start;
    var runAgain = count + currentStart;
    counter = 1;

    return runAgain;

  }
  var runAgain = getResponse();

  console.log(runAgain);

  loopFunction();
}
}

推荐阅读