Редактировать: я использую застежку.Обновил код до фактического GAS!
У меня есть GAS, развернутый как веб-приложение.Мы отправляем POST-запросы из Slack с помощью команды slash, и ему требуется ответ менее чем за 3000 мс, поскольку GAS не может обработать асинхронный код.
При первом запросе для отправки ответа требуется более 3000 мс, но приследующие запросы, это около 1500 мс.
Функция doPost
выглядит следующим образом.
var exports = exports || {};
var module = module || { exports: exports };
Logger = BetterLog.useSpreadsheet('spreadsheetId');
function doPost(request) {
var startExecutionDate = new Date();
var path = request.parameter.path;
Logger.log("Request received with path: " + path);
var response = Responses.Error;
var token = request.parameter.token;
if (path.startsWith('/slack')) {
Logger.log("Slack request");
var slackRouter = new SlackRouter();
response = slackRouter.post(request);
// ...
}
// ...
}
И это код для Slack Router.
var exports = exports || {};
var module = module || { exports: exports };
var SlackRouter = (function () {
function SlackRouter() {
}
SlackRouter.prototype.post = function (request) {
var path = request.parameter.path;
switch (path) {
case Routes.Team:
Logger.log("For team");
// ...
}
};
return SlackRouter;
}());
exports.SlackRouter = SlackRouter;
У меня есть временные метки для каждого журнала.
Первая попытка
| Timestamp | Delta in ms | Log Message |
|--------------|-------------|---------------|
| 11:22:34:164 | 0 | Path: ... |
| 11:22:35:354 | 1190 | Slack request |
| 11:22:35:462 | 108 | For team |
Вторая попытка
| Timestamp | Delta in ms | Log Message |
|--------------|-------------|---------------|
| 11:22:45:047 | 0 | Path: ... |
| 11:22:45:164 | 117 | Slack request |
| 11:22:45:350 | 186 | For team |
У меня уже было несколько идей, когда веб-приложение переходит ксостояние сна, но поскольку мы вычисляем дельту из первого сообщения журнала, это не имеет смысла.
Так что же происходит за кулисами?Вам известны какие-нибудь простые обходные пути?Если возможно, я не хочу создавать микросервис, чтобы вовремя отправить ответ Slack, а затем отправить фактический ответ.