Google Apps Script для каждой причины ошибки, но не для - PullRequest
2 голосов
/ 17 мая 2019

У меня есть простой код скрипта Google Apps, такой как:

function throwsError(){
  var inboxThreads = GmailApp.getInboxThreads();
  var sliceArr = inboxThreads.slice(0, 3);
  Logger.log(sliceArr.length);

  for each (var thread in sliceArr){
    Logger.log(inboxThreads.containsThread(thread));
  }
}

function doesNotThrowError(){
  var inboxThreads = GmailApp.getInboxThreads();
  var sliceArr = inboxThreads.slice(0, 3);
  Logger.log(sliceArr.length);

  for (var i = 0; i < sliceArr.length; i++){
    Logger.log(inboxThreads.containsThread(sliceArr[i]));
  }
}

Array.prototype.containsThread = function(thread){
  Logger.log("Here");
  Logger.log(thread);
  return this.filter(function(t){ return t.getId() == thread.getId(); }).length > 0;
}

Как показывают названия функций, throwsError() выдает ошибку TypeError: Cannot find function getId in object function (thread) {...}..doesNotThrowError() работает без проблем.Единственное различие между ними заключается в том, что один использует цикл for, а другой - цикл for each.

Вывод журнала throwsError() выглядит следующим образом:

image

Кажется, в моем массиве sliceArr всего 3 элемента, но containsThread вызывается 4 раза.(Кроме того, в четвертый раз кажется, что она передает функцию containsThread в себя в качестве параметра).Есть идеи, что может быть причиной этого?

Я склоняюсь к тому, что это ошибка в Google Apps Script, но я хотел бы проверить здесь на случай, если кто-то еще поймет.Обратите внимание, что Google Apps Script работает на JS 1.6 с некоторыми частями 1,7 и 1,8

1 Ответ

0 голосов
/ 18 мая 2019

Не использовать для каждого

С https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for_each...in

Оператор for each ... in устарел как часть стандарта ECMA-357 (E4X).Поддержка E4X была удалена.Попробуйте вместо этого использовать for ... of.

Firefox теперь предупреждает об использовании для каждого ... in, и он больше не работает, начиная с Firefox 57.

См. Warning: Циклы JavaScript 1.6 for-each-in устарели для справки по миграции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...