Firebase计划在10分钟后运行一个函数



我正在使用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

没有内置的runAfter触发器类型。

您可以定期安排一个函数,然后检查过期内容,也可以使用"云任务"来触发单个过期节点,正如Doug在他的博客文章《如何安排云函数在未来使用云任务运行》中所描述的那样(以构建Firestore文档TTL(。

相关内容

  • 没有找到相关文章

最新更新