Асинхронное выполнение функции App Script - PullRequest
0 голосов
/ 18 декабря 2018

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

Может ли кто-нибудь указать мне правильное направление или привести пример?Обещания, обратные вызовы или что-то, что может помочь мне в этом.

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

Что я пытаюсь сделать, это выполнить рефакторинг таким образом, чтобы он работал следующим образом

function doPost(e) {
    // parsing and getting values from e
    var returnValue = foo(par1, par2, par3);
      return ContentService
             .createTextOutput(JSON.stringify(returnValue))
             .setMimeType(ContentService.MimeType.JSON);
}

function foo(par1, par2, par3) {
    var returnValue = something(par1, par2, par3); // get the value I need to return;

    // continue in an Async way, or schedule execution for something else
    // and allow the function to continue It's flow

    return returnValue;
}

Теперь я хочу реализовать этот бит в foo, потому что он занимает много времении я не хочу рисковать тайм-аутом, также логика, которая происходит там, полностью независима от клиента, так что это не имеет значения, мне просто нужно возвращаемое значение, которое я получу раньше.

Также я думаю, что стоит упомянуть, что это развернуто на google drive как веб-приложение.

1 Ответ

0 голосов
/ 18 декабря 2018
  • Вы хотите выполнять функции с помощью асинхронной обработки с использованием Google Apps Script.
  • Вы хотите запускать функции с асинхронной обработкой с использованием триггера времени.

ЕслиМое понимание верно, к сожалению, нет никаких методов и официального документа для непосредственного достижения этого.Но в качестве обходного пути этого можно добиться с помощью API-интерфейса Google Apps Script и метода fetchAll, который может работать с помощью асинхронной обработки.

Этот обходной путь выглядит следующим образом.

  1. Разверните исполняемый файл API, включите API скриптов Google Apps.
  2. Используя fetchAll, запросите конечную точку API скриптов Google Apps для запуска функции.
    • Когда несколько функций запрашиваются один раз, они работают с асинхронной обработкой fetchAll.

Примечание:

  • Я думаючто веб-приложения также можно использовать вместо API скриптов Google Apps.
  • Чтобы просто использовать это временное решение, я создал библиотеку GAS .Я думаю, что вы также можете использовать его.
  • В этом обходном пути вы также можете запускать функции с асинхронной обработкой с использованием триггера времени.

Ссылки:

Если я неправильно понимаю ваш вопрос, извините.

...