【问题标题】:Firebase schedule run a function after 10 minuteFirebase 计划在 10 分钟后运行一个函数
【发布时间】: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


    【解决方案1】:

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

    您可以定期安排一个函数,然后检查过期内容,或者使用 Cloud Tasks 触发各个过期节点,如 Doug 在他的博客文章 How to schedule a Cloud Function to run in the future with Cloud Tasks (to build a Firestore document TTL) 中所述。

    【讨论】:

    • 实时数据库可以做以下事情吗?
    • 我链接的博客文章中的过程可以在任何数据库上工作。我建议尝试一下,如果遇到困难,请使用MCVE 发帖。
    • 嘿@kmagued。你有什么收获吗?
    • 仍在努力。抱歉回复晚了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 2018-08-17
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    相关资源
    最近更新 更多