doPost (e) как немедленно ответить HTTP 200 OK, затем сделать долгое время - PullRequest
0 голосов
/ 21 сентября 2018

В Google App Script необходимо отправить полученный HTTP-код в течение 3 секунд.

Если нет 3-секундного тайм-аута:

function doPost(e) {
    //do stuff
    long_time_function ();
    //can response received simply with this
    //this will auto response received HTTP code: 200 to the request
    return ContentService.createTextOutput(); 
}  

Теперь с 3-секунднымтребование тайм-аута: в течение 3 с, если не отправляется полученный HTTP-код, ожидающий сервер выдаст ошибку.

function doPost(e) {
    //quickly response received?
    //then do stuff
    function longtime() {//long time job }
}

Я пробовал поискать в Google, но не мог найти обходной путь без использования внешних библиотек:

Я пытался:

    function doPost(e) {
        //using
        ContentService.createTextOutput();
        //or tried with UrlFetchApp
        UrlFetchApp.fetch(response_url, ops);

        Utilities.sleep(8000);//test
       //then do stuff
        function longtime() {//long time job }
    }

Но все равно не смог полностью выполнить требование тайм-аута на 3 с.

1 Ответ

0 голосов
/ 21 сентября 2018

В настоящее время Google Apps Script не поддерживает асинхронное выполнение.Если вы можете отложить длительную функцию до минуты или 2, тогда я могу предложить обходной путь.Внутри doPost создайте управляемый по времени триггер, который запустит функцию через 1 или 2 минуты, а затем вы сразу же вернете ответ.Поскольку триггер теперь создан, он автоматически выполнит функцию в запланированное время.

Вот схема кода.

function longRunningFunction(){
  // Some code here to execute later
}

function doPost(e) {

  var now  = new Date();
  now.setMinutes(now.getMinutes()+2);
  ScriptApp.newTrigger('longRunningFunction').timeBased().at(now).create();

  return ContentService.createTextOutput('My Respnse')
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...