首页 > 解决方案 > 谷歌云发布/订阅功能在查询 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 中 与此类似的错误。我正面临发布/子功能的这个问题。

谢谢你的帮助。

标签: node.jsfirebasegoogle-cloud-firestoregoogle-cloud-functionsgoogle-cloud-pubsub

解决方案


如果有人遇到这个问题,我会回答我自己的问题。

经过大量阅读、测试后,我注意到我的日志中有一条警告,例如“函数返回未定义、预期的承诺或值”。因为我在函数中返回了一个承诺,所以我没有注意这一点。

在我的函数之上添加一个 return 修复了我的警告,并且我的函数已经成功运行了 5 天。

return exports.GenerateRankings = functions.pubsub.schedule('0 3 * * *') ...

推荐阅读