firebase http函数终止和承诺

时间:2018-08-12 15:47:55

标签: node.js firebase-authentication google-cloud-functions

我具有以下firebase云功能

exports.sendToUser = functions.region('europe-west1').https.onRequest((request, response) => {

  console.log('start');
  const receiverUid = request.body.receiverId;
  const requestingUid = getUserIdFromRequest(request);

  // Notification details.
  const payload = {       
    "data": {
      "type": request.body.type,
      "mainData": request.body.mainData
    }
  };
  const options = {
    "priority": "high"
  }

  console.log('check');
  requestingUid.then(uid => {
    console.log('complete');
    payload.data.senderId = uid;
    sendMessageToUser(receiverUid, payload, options);
    response.status(200).send();
  }).catch(err => {
    console.error(err);
    response.status(401).send(err);
  });
});

此功能的我的问题是,它可以正常打印“开始”和“检查”,但不打印“完成”或“接收器”,也不执行“ sendMessageToUser”功能。但是,状态200被响应,并且该功能终止,我可以在开发人员控制台和客户端设备的日志中看到它们。

此外,当用response.status(200).send();或其他响应代码替换行response.status(400).send();或其他响应代码时,将发送正确的状态(400),但不会打印日志,并且不会执行“ sendMessageToUser”功能。

但是,该函数有时会正确执行,因此我假设该函数以某种方式过早终止。但是,如何发送正确的响应代码呢?我知道有必要从异步函数中返回一个承诺,但是由于这是一个HTTP触发的(同步)函数,我不知道该如何处理。

此外,昨天是第一次出现此特定错误。在此之前,它运行良好。那么有人可以解释这里发生了什么吗?

0 个答案:

没有答案