【问题标题】:Cloud Functions with Firestore error "Deadline Exceeded"带有 Firestore 错误“已超过截止日期”的 Cloud Functions
【发布时间】:2018-03-25 23:26:55
【问题描述】:

我目前正在测试新的 firestore,但我总是遇到同样的问题,它告诉我有关 Deadline exceeded

的信息
{ Error: Deadline Exceeded
    at /user_code/node_modules/firebase-admin/node_modules/grpc/src/node/src/client.js:554:15
  code: 16,
  metadata: Metadata { _internal_repr: {} },
  note: 'Exception occurred in retry method that was not classified as transient' }

这是我当前的代码,看起来不错(当我将它部署到 Firebase 时可以工作)

const functions = require('firebase-functions');

const admin = require('firebase-admin');
var serviceAccount = require("./xxxxxxxx-firebase-adminsdk.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://xxxxxxxxx-xxxx.firebaseio.com"
});

exports.registerUser = functions.auth.user().onCreate(event => {
  admin.firestore().collection('users').doc(event.data.uid).set({
    name: 'Test User',
    country: 'USA'
  }).catch(error => {
    console.log(error);
  })
});

它还显示此消息函数返回未定义、预期的 Promise 或值

【问题讨论】:

标签: node.js firebase firebase-authentication google-cloud-functions google-cloud-firestore


【解决方案1】:

使用 Cloud Functions 触发器,您需要 return a promise,当工作完成时,该触发器将得到解决。文档上的 set() 方法返回一个 promise,因此您应该返回它以让 Cloud Functions 知道何时可以安全地清理该函数:

exports.registerUser = functions.auth.user().onCreate(event => {
  return admin.firestore().collection('users').doc(event.data.uid).set(...)
});

【讨论】:

  • @JeromeGoldstein 为什么不将此作为一个单独的问题提出,因为它与这里的问题没有直接关系?
  • 我似乎在使用 async 函数作为 Firebase 函数的 onRun 参数时遇到了这个问题。如果async 函数总是返回一个promise,你能否解释一下为什么这个错误仍然发生?
猜你喜欢
  • 2020-04-28
  • 2017-07-07
  • 2021-06-26
  • 2019-09-26
  • 2018-03-21
  • 2021-02-12
  • 1970-01-01
  • 2020-06-05
相关资源
最近更新 更多