用于Firebase错误处理的云功能

时间:2017-08-14 11:01:27

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

我想知道在链接promises时编写node.js代码的正确方法是什么,如果出现问题我需要更新实时数据库?

以下是代码:

export const testErrorHandling = functions.database
      .ref('/workqueue/{pushId}/something').onWrite(event => {

  // Exit when the data is deleted.
  if (!event.data.exists()) {
    return;
  }

  //This is the retry count, give up if more than 5 times have been retried.
  const data = event.data.val()
  if (data.count >= 5) {
    return
  }

  return event.data.ref.root.child(data.fulluri).once('value').then(snapshot => {
    //Process all, if ok, delete the work queue entry
    return event.data.ref.remove()  
  }).catch(exception => {
    console.log('Error!: ' + exception)

    //Log error, increase retry count by one an write to that 
    //location to trigger a retry

    //Is the line below OK?
    //return event.data.ref.child('count').set(data.count + 1)
  })

})

我想在很多情况下这是常见的要求,但找不到一个例子,因为所有的例子似乎只是写入console.error并完成。 (现实世界中很少见。)

1 个答案:

答案 0 :(得分:2)

[Firebase云功能开发者] 你的想法很聪明。它会工作很多次,但不会捕获较低级别的问题,例如数据库不可用或应用程序超时(尽管可以通过重新排列的Promise.race修复)。

我们正在努力为核心产品添加重试次数。既然你提出了这个问题,我很乐意征求一些客户的意见。作为开发人员,您在重试策略中需要/期望哪些功能?您认为什么是理智的默认值,您希望如何覆盖这些默认值?