Вызов google.script.run с функциями пространства имен

Я переносил старый проект javascript в GAS и сталкиваюсь с блокировщиком при попытке запустить функции пространства имен из веб-приложения на стороне клиента. Пример быстрого кода:

var foo = function() {
  function doBar() {
    //do stuff
  }

  function doBang() {
    //do stuff
  }

  return {
  bar:doBar,
  bang:doBang
  }
}();

Хотя это было бы легко вызвать на стороне сервера через foo.bar(), я столкнулся со стеной, пытаясь поговорить с этими функциями из моего веб-приложения. Я надеялся сделать что-то вроде этого:

<script>
  google.script.run.withSuccessHandler(callback).foo.bar();
  function callback() {
    //do stuff
  }
</script>

Но, увы, это не работает. Есть ли что-то, что мне не хватает, или другой способ заставить это работать без какой-либо функции обработчика, не содержащейся в пространстве имен, которая проходит через мои пространства имен?

Поскольку это миграция проекта, у меня есть очень хорошо структурированный, но огромный набор пространств имен; Для этого потребуется очень длинная и надежная функция обработчика, поэтому я бы хотел по возможности избегать этого.

Почему бы просто не передать как параметр? google.script.run.withSuccessHandler(callback).foo(internalF‌​unctionName)

TheMaster 31.03.2022 15:10

@TheMaster, если я вас не понимаю, это то, что я имел в виду, используя функцию обработчика или маршрутизатора. Кошмар в этом случае, потому что у меня много сотен маршрутов в моих пространствах имен, и я не слишком в восторге от использования evals.

Chris 31.03.2022 22:10

Не видя проблемы. Мне кажется двухстрочная модификация? return ({ bar:doBar, bang:doBang })[internalFunctionName]()?

TheMaster 31.03.2022 23:09

@TheMaster Я не уверен, что понимаю, что вы имеете в виду. Не могли бы вы уточнить?

Chris 01.04.2022 01:11

Не могли бы вы пояснить, насколько сложной будет функция обработчика, если редактировать ответит на ваш вопрос?

TheMaster 01.04.2022 08:46
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам понадобится эта функция обработчика. Сценарий приложений не понимает, что вы вызываете серверную функцию, если добавляете точку, и поэтому вы получаете эту ошибку:

TypeError: Cannot read properties of undefined (reading 'bar')

Запрос функции:

Я предлагаю вам запросить эту функцию с помощью этот шаблон системы отслеживания проблем, если вы хотите, чтобы она была реализована.

Другие вопросы по теме