Firebase云function与批量更新不一致
我有我的firebase云function,我在这里调用我的外部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的计划,这是完全正常的。 但问题是,当我创build批量数据(大约50到100个条目)时,对我的自定义url的HTTP请求无法正常工作。一个或两个HTTP请求正在被跳过。
我debugging了我的自定义服务器,发现它没有收到来自Firebase的缺less请求。 但是我也检查了云function日志,我发现每个事件都被正确地触发了。
可能是什么问题呢? 我做错了什么?
你没有从你的函数返回任何价值。 这意味着云端函数假设在最后一条语句运行后,函数完成了工作。 但是,由于您在该函数中进行asynchronousHTTP调用,该调用可能尚未完成。 不幸的是,您不会告诉Cloud Functions关于您有一个突出的呼叫的事实,因此您可能会在任何时候在您返回之后终止您的function。
解决scheme是返回在HTTP请求完成后parsing的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的开发者来说,这是一个常见的问题,涵盖的内容包括:
- Firebase文档
- 这篇博文
- 这个video
- 存储上的Firebasefunction是否存在通配符?
- 将Firebases的thirdpartyuserdata对象发布到服务器
- 在Node.js应用程序中接收Firebase云消息
- 使用Firebase FCM和Google App Engine发送通知
- 如何使用Node和Angular在服务器和客户端之间传输数据?
- 电子Firebase:FIREBASE警告:提供的身份validation凭据无效
- Firebase createUserWithEmailAndPassword方法在node.js中未定义
- Firebase – NodeJS:用于Google API的OAuth2域范围委派
- 当我的Node.js应用程序处于脱机状态时,是否应将Firebase数据库设置为脱机?