Пытаюсь использовать метод bind() в скрипте Google Таблиц, но получаю ошибку
Я хочу передать дополнительные параметры в функцию обратного вызова для метода forEach. Вот мой код:
function display(message, value) {
Logger.log(message + ": " + value);
}
function execute() {
var numbers = [5, 10, 15];
var text = "Результат";
// На этой строке возникает ошибка
// TypeError: Cannot convert null to an object
numbers.forEach(display.bind(null, text));
}
execute();
Код выглядит правильно, но выдает ошибку типа. Может быть Google Таблицы не поддерживают метод bind()? Знаю что есть другие способы решения этой задачи, но хочется понять почему именно этот подход не работает в данной среде.
У меня была такая же проблема! forEach в Google Apps Script работает не так, как в обычном JavaScript. Попробуй обычный цикл for или стрелочную функцию вместо bind:
numbers.forEach(value => display(text, value));
Это точно сработает. bind() вроде поддерживается, но Google Apps Script иногда глючит с контекстом функций.
bind() работает в Google Apps Script, но Logger.log() не всегда показывает результат сразу. Замени Logger.log() на console.log() или SpreadsheetApp.getUi().alert() - так точно увидишь что происходит. И проверь версию V8 в настройках проекта - старые версии могли глючить с некоторыми методами.
Попробуй передать this вместо null в bind(). У меня была та же проблема с null - Google Apps Script иногда странно с ним работает. Или используй стрелочные функции, они надежнее работают в этой среде.