【问题标题】:Firebase cloud functions inconsistent with bulk updatesFirebase 云功能与批量更新不一致
【发布时间】:2017-08-21 12:57:08
【问题描述】:

我有我的 firebase 云函数,我在其中像这样调用我的外部 api 端点。

const functions = require('firebase-functions');
var admin = require("firebase-admin");
admin.initializeApp(functions.config().firebase);
var request = require('request');
var moment = require('moment');
var rp = require('request-promise');

var db = admin.database();

exports.onCheckIn = functions.database.ref('/news/{newsId}/{entryId}')
      .onCreate(event => {
        console.log("Event Triggered");
        var eventSnapshot = event.data.val();
        request.post({
              url: 'http://MyCustomURL/endpoint/',
              form: {
                data: eventSnapshot.data
             }
            }, function(error, response, body){

                console.log(response);

            });



      })

我正在使用 Blaze 计划,这完全可以正常工作。但问题是,当我创建批量数据(大约 50 到 100 个条目)时,对我的自定义 url 的 HTTP 请求无法正常工作。一个或两个 HTTP 请求被跳过。

我已经调试了我的自定义服务器,发现它没有收到来自 firebase 的丢失请求。但是我也检查了云功能日志,发现每个事件都被正确触发了。

可能是什么问题?我做错什么了吗?

【问题讨论】:

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


    【解决方案1】:

    您没有从函数中返回任何值。这意味着 Cloud Functions 假定函数在最后一条语句运行后完成其工作。但由于您正在函数中进行异步 HTTP 调用,因此该调用可能尚未完成。不幸的是,您没有告诉 Cloud Functions 您有一个未完成的调用,因此它可能会在您返回后随时终止您的函数。

    解决方案是返回一个在 HTTP 请求完成后解析的 Promise。由于您已经包含request-promise,这很简单:

    exports.onCheckIn = functions.database.ref('/news/{newsId}/{entryId}')
    .onCreate(event => {
      console.log("Event Triggered");
      var eventSnapshot = event.data.val();
      return rp.post({
          url: 'http://MyCustomURL/endpoint/',
          form: {
            data: eventSnapshot.data
          }
      });
    })
    

    对于刚接触 JavaScript 或 JavaScript 和 Firebase 的开发人员来说,这是一个常见问题,在以下内容中有所介绍:

    【讨论】:

    • 救了我的命,如果我们对数组中的每个值使用 for 循环进行迭代,逻辑相同吗?任何可用的现代 rx parrlel 请求选项最佳实践??
    • 我找到了一种新方法,弗兰克你能验证一下吗stackoverflow.com/questions/54209690/…
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 2018-06-25
    • 2017-12-24
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2020-06-09
    相关资源
    最近更新 更多