我的目标是创建一个幂等云函数,以更新某些文档的计数器。
我不是在增加或减少计数器,而是查询文档并使用结果总数更新计数器。
const db = admin.firestore();
export const unprocessedReceiptsCount =
functions.firestore.document('Purchases/{purchaseId}')
.onWrite(async (snapshot, context) => {
const unprocessedRef = db.collection('Purchases').where('hasBeenProcessed', '==', false);
const unprocessedSnap = await unprocessedRef.get();
const count = unprocessedSnap.docs.length;
console.log(count);
return count;
});
当我更新任何文档中的hasBeenProcessed字段时,它应该记录一个一致的数字。但是,我得到了全面的结果:2、63、8、44。每次运行该函数时,它都会显示似乎是一个随机数。
我在做什么错了?
答案 0 :(得分:2)
最后,这是一个答案:
Google员工这样说:
该错误是由此问题https://github.com/grpc/grpc-node/issues/895引起的。我们的工程师建议删除node_modules,然后尝试再次安装,因为grpc-js 0.4.1现在尚未发布。
他们的解决方案对我不起作用,但确实如此:
iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAMAAABhq6zVAAAABlBMVEX///8AAABVwtN+AAAAF0lEQVQImWNgoAJghABkHrIcskpSjAUABSYAEabdEBsAAAAASUVORK5CYII=
这也解决了Cloud Functions中的问题。
----原始评论---
我遇到了同样的问题。上周效果很好,现在即使是没有限制的简单get()也会返回随机数的结果。
以下代码演示了admin SDK的问题。我已经向Google提交了错误报告。
npm uninstall @grpc/grpc-js
npm install @grpc/grpc-js@0.4.0