firebase - "Error: 13 INTERNAL: An internal error occurred"有时发生在 firebase-function 的触发器中

标签 firebase google-cloud-firestore google-cloud-functions

该触发器用于检测进度中的顺序是否已更新,并有助于更新进度的概览状态和完成时间。

但是当发生内部错误时,它并不总是有效,如下所示:

Error: 13 INTERNAL: An internal error occurred. at Object.exports.createStatusError 
(/srv/node_modules/grpc/src/common.js:91:15) at Object.onReceiveStatus 
(/srv/node_modules/grpc/src/client_interceptors.js:1204:28) at InterceptingListener._callNext 
(/srv/node_modules/grpc/src/client_interceptors.js:568:42) at InterceptingListener.onReceiveStatus 
(/srv/node_modules/grpc/src/client_interceptors.js:618:8) at callback 
(/srv/node_modules/grpc/src/client_interceptors.js:845:24)


这是我的代码:
export const calc_status = function.firestore.document("users/{userid}/schedule/{scheduledid}").onUpdate(async (change, context) => {
    // before error occurred ...
    const data = change.after.data();
    let curStatus = data.status;
    ...
    ...

    // after getting occurred ...
    if(data.status !== curStatus ) {
        data.status = curStatus;
        if(curStatus === 'finished') {
            data.finish_time = new Date().toISOString();
        }
        if(curStatus !== 'expired'){
            data.update_time = data.expired_time;
            data.finish_time = data.expired_time;
        } else {
            data.update_time = new Date().toISOString();
        }
        await change.after.ref.update(data);
        return Status.SUCCEEDED;
    }
    return Status.SUCCEEDED;
}

我很困惑为什么会发生错误,因为这个函数在大多数时候都可以正常工作。

有没有人遇到和我一样的问题?

为什么会发生错误?你的解决方案是什么?

谢谢你。

最佳答案

这似乎是长期存在的框架错误 github.com/firebase/firebase-functions/issues/536目前还没有解决办法。
尽管您无法解决冷启动时偶尔发生且间歇性发生的错误,但您可以通过启用 retries 来解决它。有关通过完整控制台的功能,请参阅 Retry Cloud Functions for Firebase until it succeeds为说明。
这假设您很好地处理了代码中的内部错误,因为它会重试任何失败,但在我的情况下,函数 onCreate 处理程序只是通过 PubSub 排队一些稍后的处理,因此任何失败都意味着它应该重试。
2020 年 10 月更新
firebase-functions 的 v3.11 开始您现在可以通过设置 failurePolicy 在您的功能代码中设置重试模式至 true

module.exports = functions.runWith({ failurePolicy: true }).firestore.document('collection/doc').onWrite(async (change, context) => {
  //do function stuff
});

关于firebase - "Error: 13 INTERNAL: An internal error occurred"有时发生在 firebase-function 的触发器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58950209/

相关文章:

firebase - 在 Firebase 中,push 和 childByAutoId 有什么区别

node.js - 将新集合添加到 firestore 中现有文档的云功能

android - Firebase Firestore toObject 在 bool 属性映射上失败

firebase - Firestore 离线 promise 处理?

ios - Swift - 检索数据后显示 UICollectionView

firebase - 如何对用express包装的firebase函数进行单元测试?

javascript - BAD_REQUEST_ERROR - Nodejs 请求方法

firebase - collection$.valueChanges() 只返回更改还是整个集合?

firebase - 增加 Firebase Cloud Firestore 字符串上传大小

javascript - 使用用户名获取文档引用