我具有以下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触发的(同步)函数,我不知道该如何处理。
此外,昨天是第一次出现此特定错误。在此之前,它运行良好。那么有人可以解释这里发生了什么吗?