NodeJS 函数执行耗时60000 ms,完成状态:'错误'

wvmv3b1j  于 2023-06-29  发布在  Node.js
关注(0)|答案(1)|浏览(154)

获取超时,即使函数按预期工作
函数执行耗时60000 ms,完成状态:'错误'
如上所述,我有一个Firebase云函数,它使用令牌向特定用户发送通知,代码按预期工作,向用户发送具有正确标题和消息的通知。但是,在查看日志时,返回一个错误。
我还没有看到很多关于这一点,当谷歌我看到很多关于一个临时的问题与服务器发生在几年前的职位。

下面代码

require("firebase-functions/logger/compat");

const functions = require("firebase-functions");
const admin = require("firebase-admin");

// to get the ADC automatically
admin.initializeApp({credential: admin.credential.applicationDefault()});

exports.pushNotificationPulse = functions.https.onRequest((request, response) => {
  console.log("Push notification event triggered [Function last updated 28/06/23]");

  const firstName = request.query.fullName.split(" ")[0];
  const FCMtoken = request.query.FCM_Token;
  let msg = request.query.msg;

  if (msg == "") {
    msg = "DEFAULT MSG IF NOT PROVIDED";
  }

  const message = {
    notification: {
      title: "TEXT HERE",
      body: msg,
    },
    token: FCMtoken,
  };

  admin
    .messaging()
    .send(message)
    .then((response) => {
      console.log(`Successfully sent message: ${response}`);
      return {status: `Successfully sent message: ${response}`};
    })
    .catch((error) => {
      console.log(`Error sending message: ${error}`);
      return {status: `Error sending message: ${error}`};
    });
});

日志内容

2023-06-28T13:43:08.151324506Z D pushNotificationPulse: Function execution started
2023-06-28T13:43:08.201451Z I pushNotificationPulse: Push notification event triggered [Function last updated 28/06/23]
2023-06-28T13:43:08.810690Z I pushNotificationPulse: Successfully sent message: projects/toy-app-80345/messages/1687959788647301
2023-06-28T13:44:08.152258848Z D pushNotificationPulse: Function execution took 60000 ms, finished with status: 'error'

因此,即使主要的实际任务在半秒(609.239毫秒)内执行,它也会等待60秒(60000毫秒)。

gv8xihay

gv8xihay1#

您的代码实际上并没有向客户端发送响应。像这样的线条实际上没有任何作用:

return {status: `Successfully sent message: ${response}`};

您必须使用response.send或类似的东西来实际发送响应。正是这个响应正确地终止了函数。如果您不发送响应,它将超时,就像您现在观察到的那样。有关详细信息和示例,请参阅有关终止HTTP函数的文档。
重要:确保所有HTTP函数都正确终止。通过正确地终止函数,可以避免运行时间过长的函数产生过多的费用。使用res.redirect()、res.send()或res.end()终止HTTP函数。
也许你想这样做:

response.send({status: `Successfully sent message: ${response}`})

相关问题