【发布时间】:2021-07-23 03:15:12
【问题描述】:
我正在使用 Firebase 实时数据库来存储来自我的 React Native 应用程序的数据。我的应用程序基本上让用户保留一个位置。如果用户未及时到达,该位置应在 10 分钟后自动删除。所以,我想知道如何安排一个函数在创建预留实例后 10 分钟运行。我尝试使用 Cloud Functions 和 Pub/Sub,但找不到使用这些服务执行以下操作的方法。
代码:
exports.onCreateReservation = functions.database
.ref('/reservations/{id}')
.onCreate(async (snapshot) => {
const project = 'proj';
const location = 'us-central1';
const queue = 'cancel';
const userId = snapshot.key;
const tasksClient = new CloudTasksClient();
const queuePath = tasksClient.queuePath(project, location, queue);
const expirationAtSeconds = Date.now() + 1000;
const url = `https://${location}-${project}.cloudfunctions.net/cancelReservation`;
const task = {
httpRequest: {
httpMethod: 'POST',
url,
body: JSON.stringify({id: userId}),
headers: {
'Content-Type': 'application/json',
},
},
scheduleTime: {
expirationAtSeconds,
},
};
await tasksClient.createTask({
parent: queuePath,
task,
});
});
exports.cancelReservation = functions.https.onRequest(async (req, res) => {
const {id} = req.body;
try {
await admin.database().ref(`/reservations/${id}`).remove();
res.send(200);
} catch (err) {
console.error(err);
res.status(500).send(err);
}
});
执行 onCreateReservation 函数后,函数日志中不断出现此错误。它一直以状态“错误”结束
Error: 13 INTERNAL: Request message serialization failure: invalid encoding
【问题讨论】:
标签: react-native firebase-realtime-database google-cloud-functions scheduled-tasks google-cloud-pubsub