Проблема в google.script.run
в отличие от обычной функции JavaScript, которая не возвращает значение.Он вызывает функцию на стороне сервера асинхронно.Т.е. он вызывает функцию на стороне сервера, но не ожидает возврата или ответа.Вызывает функцию и продолжает выполнение оставшегося кода.
Причина этого в том, что серверный код не останавливает загрузку страницы для удобства пользователей.Однако вы можете использовать google.script.run.withSuccessHandler
для настройки обратного вызова функции на стороне клиента после завершения функции на стороне сервера.В котором вы передаете функцию для вызова .withSuccessHandler()
.В вашем случае вы будете делать что-то вроде этого:
<script>
google.script.run.withSuccessHandler(showNames).getSheetNames();
function showNames(sheetNames){
document.getElementById('output').innerHTML = sheetNames;
}
</script>
Обратите внимание, что возврат из вашей функции getSheetNames () передается в качестве аргумента функции обратного вызова, в данном случае - функции showNames()
Наконец, для обработки любого сбоя в выполнении кода сервера вы можете использовать google.script.run.withFailureHandler(onFailure)
.Рекомендуется всегда включать функцию для обработки сбоев.
Редактировать: Альтернативное решение с использованием скриптлетов .Вы можете использовать скриптлеты для вывода значения getSheetNames()
следующим образом:
<script>
document.getElementById('output').innerHTML = JSON.parse(<?= getSheetNames() ?>);
</script>
Преимущество этого заключается в том, что выполнение getSheetNames()
завершено перед загрузкой страницы.Просто убедитесь, что вы создали HTML-шаблон и оценили его, прежде чем показывать веб-страницу следующим образом: var html = HtmlService.createTemplateFromFile('Your_HTML_File').evaluate()