node.js - 谷歌云发布/订阅功能在查询 Firestore 时给出“请求的快照版本太旧”
问题描述
我有一个对集合执行简单查询的 gcloud pub/sub-function。它在 10 月 8 日之前运行良好。现在我看到“请求的快照版本太旧”错误消息。
我用相同的代码创建了一个 HTTP 函数并手动运行它,它工作得很好。
这是功能:
// 0 3 * * * - at 03:00 AM every day
exports.GenerateRankings = functions.pubsub.schedule('0 3 * * *')
.onRun((context) => {
console.log("GenerateRankings Task started")
const playersCollection = admin.firestore().collection('players')
playersCollection.orderBy("Coin", "desc").get()
.then((qs) => {
console.log("Fetching Players by Coin")
// some staff
return true
})
.catch((error) => {
console.error("Error fetching players", error)
return false
})
})
这是错误堆栈:
9 FAILED_PRECONDITION: The requested snapshot version is too old.
at Object.callErrorFromStatus (/workspace/node_modules/@grpc/grpc-js/build/src/call.js:31:26)
at Object.onReceiveStatus (/workspace/node_modules/@grpc/grpc-js/build/src/client.js:327:49)
at Object.onReceiveStatus (/workspace/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:305:181)
at /workspace/node_modules/@grpc/grpc-js/build/src/call-stream.js:124:78
at processTicksAndRejections (internal/process/task_queues.js:79:11)
Caused by: Error
at Query._get (/workspace/node_modules/@google-cloud/firestore/build/src/reference.js:1466:23)
at Query.get (/workspace/node_modules/@google-cloud/firestore/build/src/reference.js:1455:21)
at /workspace/index.js:22:47
at cloudFunction (/workspace/node_modules/firebase-functions/lib/cloud-functions.js:130:23)
at /layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/invoker.js:198:28
at processTicksAndRejections (internal/process/task_queues.js:97:5) {
code: 9,
details: 'The requested snapshot version is too old.',
metadata: Metadata { internalRepr: Map {}, options: {} }
}
我知道还有另一个未回答的问题 “请求的快照版本太旧”。Firestore 中 与此类似的错误。我正面临发布/子功能的这个问题。
谢谢你的帮助。
解决方案
如果有人遇到这个问题,我会回答我自己的问题。
经过大量阅读、测试后,我注意到我的日志中有一条警告,例如“函数返回未定义、预期的承诺或值”。因为我在函数中返回了一个承诺,所以我没有注意这一点。
在我的函数之上添加一个 return 修复了我的警告,并且我的函数已经成功运行了 5 天。
return exports.GenerateRankings = functions.pubsub.schedule('0 3 * * *') ...
推荐阅读
- python-3.x - 带有覆盆子的数据矩阵
- kotlin - JVM 使用 Java_xx 方法而不是 JavaCritical_xx
- ionic4 - 包含离子卡的 Ionic 4 离子载玻片 - 布局问题
- spring - 带有junit5的spring嵌入式kafka-引导服务器中没有给出可解析的引导URL
- mariadb - Mariadb mysql_upgrade 失败
- python - Python pandas在for循环中访问列名
- c# - 创建一个包含大量文件的虚拟文件夹
- python - imap 函数:传递一个列表和另一个固定字符串作为参数(Python 3.7/3.8)
- python - 获取自动发布到我在 Django 中开发应用程序的 URL 的数据的正确方法是什么?
- c# - 使用 IIS 和 C# 如何检索网站应用程序 URL 列表?