我看过一个增量计数器,其中 Cloud 功能引用了实时数据库,但还没有引用Firebase Firestore .
我有一个用于侦听新文档的 Cloud 功能:
exports.addToChainCount = functions.firestore
.document('chains/{name}')
.onCreate((snap, context) => {
// Initialize document
var chainCounterRef = db.collection('counters').doc('chains');
var transaction = db.runTransaction(t => {
return t.get(chainCounterRef).then(doc => {
// Add to the chain count
var newCount = doc.data().count + 1;
t.update(chainCounterRef, { count: newCount });
});
}).then(result => {
console.log('Transaction success!');
}).catch(err => {
console.log('Transaction failure:', err);
});
return true;
});
我正在尝试上面的事务,但是当我在终端中运行 firebase deploy
时,我收到此错误:
error每个then()都应返回一个值或抛出promise / always-return函数predeploy error:命令以非零退出代码1终止
这是我第一次尝试任何node.js,我不确定我是否写得正确 .
2 回答
如果要安全地增加文档中的数字,可以使用transaction . 以下代码直接从链接页面获取 . 在给出一些初始值之后,它在文档
/cities/SF
中向一个名为population
的字段添加一个:请记住,Firestore在持续负载下限制为每秒写入一次,因此如果您要编写很多内容,则需要使用sharded counter .
这是一个潜在的解决方案 . 您可以使用分片记录投票,但随后使用 Cloud 功能聚合分片总计并更新您的计数器 . 这应该减少文档读取的数量,从而减少您的Firestore账单 .
教程:https://angularfirebase.com/lessons/firestore-cloud-functions-data-aggregation/