Печать на консоль в Google Apps Script?
Я очень новичок в программировании (взял некоторые курсы JS на Codecademy). Я пытаюсь создать простой скрипт, чтобы определить, если получить таблицу с результатами из игры в покер, кто должен заплатить кому. Я открыл скрипт Google Apps и написал для начала:
function addplayerstoArray(numplayers) {
var playerArray = [];
for (i=0; i<numplayers; i++) {
playerArray.push(i);
}
}
addplayerstoArray(7);
console.log(playerArray[3])
Идея состоит в том, чтобы создать массив с общим количеством игроков в нем. При запуске кода я думал, что он напечатает "3" на консоли. Но ничего не случилось. Он сказал
"ReferenceError:" console "не определен."
A) Что я не понимаю о том, как работает консоль Google Apps Script в отношении печати, чтобы я мог убедиться, что мой код выполняет то, что мне нужно?
B) Это проблема с кодом?
Ответы
Ответ 1
Консоль недоступна, поскольку код работает в облаке, а не в вашем браузере. Вместо этого используйте класс Logger, предоставляемый GAS:
Logger.log(playerArray[3])
а затем просмотрите результаты в среде IDE в разделе "Просмотр" > "Журналы"...
Вот некоторая документация по протоколированию с GAS.
Изменить: 2017-07-20
Приложения script теперь также предоставляют Stackdriver Logging. Просмотрите эти журналы в редакторе script в разделе "Просмотр - Консольные журналы".
Ответ 2
Просто для того, чтобы опираться на хакерское решение vinnief выше, я использую MsgBox следующим образом:
Browser.msgBox('BorderoToMatriz', Browser.Buttons.OK_CANCEL);
и он действует как точка прерывания, останавливает script и выводит любую строку, которая вам нужна для всплывающего окна. Особенно я нахожусь в Листах, где у меня проблемы с Logger.log, это обеспечивает адекватное обходное решение в большинстве случаев.
Ответ 3
Несмотря на то, что Logger.log()
является технически правильным способом вывода чего-либо на консоль, у него есть несколько неприятностей:
- Выход может быть неструктурированным беспорядком и трудно усваивается.
- Сначала вы должны запустить сценарий, затем нажмите "Просмотр/Журналы", который представляет собой два дополнительных клика (один, если вы помните сочетание клавиш Ctrl + Enter).
- Вы должны вставить
Logger.log(playerArray)
, а затем после отладки вы, вероятно, захотите удалить Logger.log(playerArray)
, следовательно, еще 1-2 шага. - Вы должны нажать OK, чтобы закрыть оверлей (еще один дополнительный клик).
Вместо этого, когда я хочу отлаживать что-то, я добавляю точки останова (нажмите номер строки) и нажмите кнопку "Отладка" (значок ошибки). Точки останова работают хорошо, когда вы присваиваете что-то переменной, но не так хорошо, когда вы инициируете переменную и хотите заглянуть внутрь нее в более позднюю точку, что похоже на то, что пытается выполнить op. В этом случае я бы заставил условие break, введя "x" (x отмечает пятно!), Чтобы выбросить ошибку во время выполнения:
![enter image description here]()
Сравнить с просмотром Журналы:
![enter image description here]()
Консоль Debug содержит больше информации и ее намного легче читать, чем наложение журналов. Одним из незначительных преимуществ этого метода является то, что вам никогда не придется беспокоиться о загрязнении вашего кода с помощью команды ведения журнала, если сохранить чистый код - это ваша вещь. Даже если вы введете "x", вы вынуждены не забывать удалить его как часть процесса отладки, иначе код не будет работать (встроенный метод очистки, yay).
Ответ 4
В проекте google script вы можете создавать html файлы (пример: index.html) или gs файлы (например: code.gs). Файлы .gs выполняются на сервере, и вы можете использовать Logger.log, как описывает @Peter Herrman. Однако, если функция создана в .html файле, она выполняется в браузере пользователя, и вы можете использовать console.log. Консоль браузера Chrome может быть просмотрено с помощью Ctrl Shift J на Windows/Linux или Cmd Opt J на Mac
Если вы хотите использовать Logger.log в html файле, вы можете использовать scriptlet для вызова функции Logger.log из html файла, Для этого вы должны вставить <? Logger.log(что-то)? > заменяет что-то тем, что вы хотите записать. Стандартные скриптлеты, в которых используется синтаксис <?...? > , выполнить код без явного вывода содержимого на страницу.
Ответ 5
Отвечая на вопросы ОП
A) Что я не понимаю о том, как работает консоль Google Apps Script в отношении печати, чтобы я мог убедиться, что мой код выполняет то, что мне нужно?
Код на.gs файлах проекта Google Apps Script запускается на сервере, а не в веб-браузере. Способ регистрации сообщений состоял в том, чтобы использовать Class Logger.
B) Это проблема с кодом?
Как сообщалось в сообщении об ошибке, проблема заключалась в том, что console
не была определена, но в настоящее время один и тот же код выдаст другую ошибку:
ReferenceError: "playerArray" не определен. (строка 12, файл "Код")
Это связано с тем, что playerArray определяется как локальная переменная. Перемещение линии из функции разрешит это.
var playerArray = [];
function addplayerstoArray(numplayers) {
for (i=0; i<numplayers; i++) {
playerArray.push(i);
}
}
addplayerstoArray(7);
console.log(playerArray[3])
Теперь, когда код выполняется без ошибок, вместо этого, чтобы посмотреть на консоль браузера, мы должны посмотреть на Stackdriver Logging. В пользовательском интерфейсе редактора приложений Google Apps нажмите " Просмотр"> "Запись стоп-дисков".
добавление
В 2017 году Google выпустил все скрипты Stackdriver Logging и добавил консоль классов, поэтому включение в нее каких-то вроде console.log('Hello world!')
приведет к ошибке, но журнал будет находиться в службе ведомости Google Cloud Platform Stackdriver вместо браузера приставка.
Из примечаний к выпуску сценариев Google Apps 2017
23 июня 2017 года
Stackdriver Logging был удален из раннего доступа. Все скрипты теперь имеют доступ к протоколу Stackdriver.
Из журнала> Запись в стоп-диск
В следующем примере показано, как использовать службу консоли для записи информации в Stackdriver.
function measuringExecutionTime() {
// A simple INFO log message, using sprintf() formatting.
console.info('Timing the %s function (%d arguments)', 'myFunction', 1);
// Log a JSON object at a DEBUG level. The log is labeled
// with the message string in the log viewer, and the JSON content
// is displayed in the expanded log structure under "structPayload".
var parameters = {
isValid: true,
content: 'some string',
timestamp: new Date()
};
console.log({message: 'Function Input', initialData: parameters});
var label = 'myFunction() time'; // Labels the timing log entry.
console.time(label); // Starts the timer.
try {
myFunction(parameters); // Function to time.
} catch (e) {
// Logs an ERROR message.
console.error('myFunction() yielded an error: ' + e);
}
console.timeEnd(label); // Stops the timer, logs execution duration.
}