Ошибка: превышен крайний срок - при вызове вызываемой пожарной облачной функции (onCall). onRequest работает отлично - PullRequest
0 голосов
/ 10 октября 2019

Я получаю сообщение об ошибке «превышен крайний срок» во внешнем интерфейсе при вызове функции вызываемой облачной среды Firebase (onCall).

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

Через 60 секунд «превышен срок» - выбрасывается винтерфейс, но функция продолжает работать на сервере и завершается с успехом. Все пакетные операции записываются в пожарный. Он ожидает завершения функции и возвращает.

exports.syncExchangeOperations = functions
  .runWith(runtimeOpts)
  .https.onRequest((req, res) => {
    return cors(req, res, async () => {
      try {
        let auth = await admin.auth().verifyIdToken(req.get('Authorization').split('Bearer ')[1]);

        let userExchange = await getUserExchange(
          auth.uid,
          req.query.exchangeId
        );

        let response = await Promise.all([
          getUserLastOperations(auth.uid, userExchange.exchangeId),
          getSystemExchange(userExchange.exchangeId)
        ]);

        let userExchangeLastOperations = response[0];
        let systemExchange = response[1];

        switch (systemExchange.id) {
          case 'binance':
            await syncBinanceOperations(
              auth.uid,
              userExchange,
              userExchangeLastOperations,
              systemExchange
            );
        }
        res.status(200).send();
      } catch (error) {
        res.status(401).send(handleErrors(error));
      }
    });
  });

1 Ответ

0 голосов
/ 10 октября 2019

«Превышен крайний срок» означает, что время вызова функции истекло с точки зрения клиента. По умолчанию установлено значение 60 секунд.

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

Также попробуйте вернуть что-то отличное от batch.commit(). Независимо от того, что эта функция возвращает, она будет сериализована и отправлена ​​клиенту, что может вызвать проблемы. Вместо этого просто await batch.commit() затем верните что-то предсказуемое, например, простой объект JavaScript.

Информацию об установке времени ожидания см. В документации API:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...