TypeError: невозможно прочитать свойство 'xx' неопределенного значения - PullRequest
0 голосов
/ 18 июня 2020

Я пытался вызвать Stripe API для получения информации об оплате. Код выглядит следующим образом:

function callStripe() { 
  var ss = SpreadsheetApp.openById("XXX");
  var sheet = ss.getSheetByName("XXX");
  var lastRow = sheet.getLastRow();
  var startRow = 1; // First row of data to process
  var dataRange = sheet.getRange(startRow, 1, sheet.getLastRow(), sheet.getLastColumn());
  var data = dataRange.getValues();

  for (var i = 0; i < lastRow + 1; ++i) {
    var row = data[i];
    var missedFee = row[6];

    if (missedFee == "") {  //only call for missing figures
       var txId = sheet.getRange(startRow + i, 2).getDisplayValue();
       var url = "https://api.stripe.com/v1/balance_transactions/" + txId;

       var params = {
        method: "GET",
        headers: {Authorization: "Basic " + Utilities.base64Encode("XXX:")}
        };
       var res = UrlFetchApp.fetch(url, params);
       var transaction = JSON.parse(res);


         var fee = transaction["fee"];
         var net = transaction["net"];
         sheet.getRange(startRow + i, 7).setValue(fee / 100);
         sheet.getRange(startRow + i, 9).setValue(net / 100);}
  }}

Я могу получить то, что мне нужно, от API после запуска функции, но возникает ошибка, как показано ниже:

TypeError: Cannot read property '6' of undefined (line 112, file "Code")

Строка 112 относится к на

var missedFee = row[6];

Могу я узнать, что сделал не так?

1 Ответ

1 голос
/ 18 июня 2020

Вы определили свой l oop for (var i = 0; i < lastRow + 1; ++i)

Учитывая, что вы начинаете с 0 (что верно, поскольку первая запись массива - 0), ваш последний i должен быть lastRow-1

Пример:

  • Допустим, у вас есть три строки, затем вы хотите повторить три раза
  • Ваши строки будут data[0], data[1] и data[2]
  • Теперь, если вы определите i < lastRow + 1 как условие для выполнения l oop, оно также будет выполняться для i = 3
  • Но нет data[3] (это будет четвертая строка) и, следовательно, нет столбца 7 в строке 4 (var missedFee = row[6];)
  • Это то, что дает вам ошибку
...