即使在用户终止后也完成HTTP云功能

时间:2018-04-22 19:41:10

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

我使用此代码调用Firebase HTTP云功能:

$.post('https://...my-function', {some_data: 'Data'}).always(function (data) { });

如果用户关闭浏览器,该功能将停止。即使用户退出,我怎么能做到这一点,该功能仍然会在后台完成?

2 个答案:

答案 0 :(得分:1)

嗨,这是我每天面对来自多个客户的场景 - 网络,机器人和ios。以下是我们如何处理它的方式。

使用云功能触发器。 https://firebase.google.com/docs/functions/database-events#handle_event_data

当您调用http触发器时,请确保将推送(firebase.ref(node_name).push(event_value))事件发送到新节点。

例如:ImageUploadingRequest

ImageUploadingRequest 节点中编写一个云函数触发器来触发onCreate。这样,即使在用户关闭浏览器之后,您也可以为所有异步功能维护队列。完成功能后,从ImageUploadingRequest节点中删除该事件。

希望这有助于你。

答案 1 :(得分:1)

对于HTTP请求,暗示客户端对工作结果感兴趣而无需另外发出请求。使用云功能,无法无限期地继续使用HTTP类型功能。

如果您希望客户端的HTTP请求启动的某些工作能够在请求和响应的生命周期之后生存,则必须执行某些操作来调用未绑定到HTTP请求的第二个函数。

Praveen的答案描述了一种方法,但只有在你已经使用实时数据库时才有意义。它还要求您小心管理存储在数据库中的工作队列。

在我看来,使用Pub/Sub trigger作为后续函数更容易实现后续工作,无论HTTP客户端发生什么,它都会继续执行。如果您使用此技术,您的HTTP函数将执行此操作:

  1. 使用完成工作所需的参数创建一个消息对象。
  2. 通过pub / sub将该消息发送到由其他函数处理的主题。
  3. 向HTTP客户端发送响应,指示工作正在进行中。
  4. 然后,pub / sub函数将:

    1. 接收消息事件对象。
    2. 异步执行工作。
    3. 返回一个承诺,指示所有异步工作何时完成。