Подтвердить что ты не робот

Печать на консоль в 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) Это проблема с кодом?

4b9b3361

Ответ 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() является технически правильным способом вывода чего-либо на консоль, у него есть несколько неприятностей:

  1. Выход может быть неструктурированным беспорядком и трудно усваивается.
  2. Сначала вы должны запустить сценарий, затем нажмите "Просмотр/Журналы", который представляет собой два дополнительных клика (один, если вы помните сочетание клавиш Ctrl + Enter).
  3. Вы должны вставить Logger.log(playerArray), а затем после отладки вы, вероятно, захотите удалить Logger.log(playerArray), следовательно, еще 1-2 шага.
  4. Вы должны нажать 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.
}