脚本在正常运行时失败但在调试时很好

时间:2018-05-08 12:06:36

标签: google-sheets

我正在开发一个自动从网站请求信息的Google电子表格,下面是代码。变量'tokens'是一个由大约60个不同的3个字母唯一标识符组成的数组。我遇到的问题是代码无法请求网站上的所有信息。相反,它会在验证部分上(随机)退回,并用“错误!”填充数组。字符串。有时它的行5,然后是10-12,然​​后是3,然后是3行,然后是多行等等。当我在调试模式下运行它时,一切都好,似乎无法重现问题。

已经尝试过睡觉(100毫秒),但没有任何修复。还查看了API接受的流量(每秒10个请求,每分钟1.200,每天100,000个),这应该不是问题。

运行时间有限,所以我需要它尽可能高效。在我将json请求中的所有值都推送到'tokens'数组后,我认为这是计算能力的问题。有没有办法让脚本等待提交更改所需的时间?

function newGetOrders() {
  var starttime = new Date().getTime().toString();
  var refreshTime = new Date();
  var tokens = retrieveTopBin();
  var sheet = SpreadsheetApp.openById('aaafFzbXXRzSi-eXBu9Xh81Ne2r09vM8rLFkA4fY').getSheetByName("Sheet37");
  sheet.getRange('A2:OL101').clear();
  for (var i=0; i<tokens.length; i++) {
    var request = UrlFetchApp.fetch("https://api.binance.com/api/v1/depth?symbol=" + tokens[i][0] + "BTC", {muteHttpExceptions:true});
    var json = JSON.parse(request.getContentText());
    tokens[i].push(refreshTime);
    Utilities.sleep(100);
    for (var k in json.bids) {
      tokens[i].push(json.bids[k][0]);
      tokens[i].push(json.bids[k][1]);
    }
    for (var k in json.asks) {
      tokens[i].push(json.asks[k][0]);
      tokens[i].push(json.asks[k][1]);
    }
    if (tokens[i].length < 402) {
      for (var x=tokens[i].length; x<402; x++) {
      tokens[i].push("ERROR!");
      }
    }
  }
  sheet.getRange(2, 1, tokens.length, 402).setValues(tokens);
}

0 个答案:

没有答案