Firebase功能现在超时

时间:2018-08-23 20:37:41

标签: javascript firebase google-cloud-functions

我阅读了其他有关FIR超时的SO帖子,其中一些是由于对firebase-functionsfirebase-admin进行了更新。我更新到了最新版本,甚至降级到了可以正常工作的原始版本(git checkout)。

这些都不起作用。

我的任何FIR函数都收到Function execution took 60002 ms, finished with status: 'timeout'错误(当请求在邮递员中运行时)

示例代码:

 exports.BSGetRequest = functions.https.onCall((url, context) => {
        console.log(url);

        const options = {
            method: 'GET',
            uri: url,
            headers: {
                'Content-Type': 'application/json',
                'Accept': 'application/json',
                'Authorization': 'MY_PRIVATE_KEY'
            },
            json: true
        };

        return rp(options)
            .then(function (response) {
                console.log({ response });
                return repos;
            })
            .catch(function (err) {
                console.error({ err });
                return err
            });
    });

我怀疑当Firebase Functions用户界面也发生变化(在控制台中;我认为有一个重大更新)或者我的语法跟不上Node 6时,它开始发生。

更新:

FIR功能再次开始工作,但我没有做任何更改。案件结案。我希望这与我的付费计划订阅有关。

1 个答案:

答案 0 :(得分:0)

由于response不是对象并且没有body属性,因此可能会引发您的UPDATED错误消息。

error变量中可能有一些您没有检查的消息。

我已经通过一些注释和调试对您的代码进行了一些细分,这将有助于您深入了解。

该请求将因抛出错误而不能通过promise返回拒绝或响应。

exports.BSGetRequest = functions.https.onCall((url, context) => {
  const options = {
      url: url,
      headers: {
          'Content-Type' : 'application/json',
          'Accept': 'application/json',
          'Authorization': 'MY_PRIVATE_KEY'
      },
      json: true
  };

  return new Promise(function (fullfilled, rejected) {
    request.get(options, function (error, response, body) {
        const decoded = he.decode(JSON.stringify(response.body));

        if (!error && response.statusCode >= 200 && response.statusCode <= 300) {
            fullfilled(JSON.parse(decoded));
            return;
        }

        // What's in `error`?
        console.error({ error });

        // I'm guessing this is where the error is - What's in `response` - Is there a `body`?
        console.log({ response });

        const responseErrorMessage = he.decode(JSON.stringify(response.body));

        const responseError = new functions.https.HttpsError('invalid-argument', responseErrorMessage);

        rejected(responseError);
    })
  });
});

编辑:尝试抛出错误消息;

exports.BSGetRequest = functions.https.onCall((url, context) => {
  const options = {
      url: url,
      headers: {
          'Content-Type' : 'application/json',
          'Accept': 'application/json',
          'Authorization': 'MY_PRIVATE_KEY'
      },
      json: true
  };

  return new Promise(function (fullfilled, rejected) {
    request.get(options, function (error, response, body) {
        const decoded = he.decode(JSON.stringify(response.body));

        if (!error && response.statusCode >= 200 && response.statusCode <= 300) {
            fullfilled(JSON.parse(decoded));
            return;
        }

        // This should handle your error correctly.
        if (error) {
          const throwError = new functions.https.HttpsError('invalid-argument', error);

          rejected(throwError);
          return;
        }

        const responseErrorMessage = he.decode(JSON.stringify(response.body));

        const responseError = new functions.https.HttpsError('invalid-argument', responseErrorMessage);

        rejected(responseError);
    })
  });
});