【发布时间】:2021-10-15 15:08:55
【问题描述】:
使用 firebase 函数在我的 firebase firestore 中插入数据。他们从不同的 API 获取数据。我写和读了很多文件——这可能是我得到这个错误的原因。
我也在 Github 上阅读了很多 Stackoverflow 帖子和问题,我发现这个错误可能有很多原因。我 99% 确信这与 Promises 无关。我正在使用async / await
我该如何处理,有什么解决办法?
当我发现它时的确切错误:
Error: 4 DEADLINE_EXCEEDED: Deadline exceeded Firebase Cloud Functions
这是 l1b3rty 询问的代码:
if (plans.results.length != 0) {
const batch = db.batch()
plans.results.forEach(async (plan) => {
const jiraKey = plan.planItem.self.split('/').pop()
let wyzioProjectId
const projects = await db.collection('projects').where('jiraKey', '==', jiraKey).get()
if (!projects.empty) {
projects.forEach(async (project) => {
wyzioProjectId = project.data().wyzioId
const jiraUserId = plan.assignee.self.split('=').pop()
const username = await user.findOne('user?accountId=' + jiraUserId)
if (username != null) {
let wyzioUserId
const users = await db.collection('users').where('name', '==', username).get()
if (!users.empty) {
users.forEach(user => {
wyzioUserId = user.data().id
})
}
batch.set(db.collection('plans').doc(JSON.stringify(plan.id)), {
'TempoId': plan.id,
'jiraKey': jiraKey,
'projectId': wyzioProjectId,
'userId': wyzioUserId,
'username': username,
'startDate': plan.startDate,
'values': plan.dates.values,
'status': 1,
'syncStatus': 1
}, { merge: true })
}
})
} else {
let key = "tempo_plan_" + plan.jiraWorkLogId + "_no_ref_project"
let message = "Impossible d'ajouter le plan : " + plan.jiraWorkLogId + ", il n'appartient à aucun projet de la base de données"
await notifications.addNotifications(db, key, message)
}
})
try {
await batch.commit()
await incrementOffsetTempo(db, 'tempo_plans')
console.log("--- tempo_plans_done ---")
} catch {
let key = "tempo_plan_" + plan.jiraWorkLogId + "_error_sync"
let message = "Impossible d'ajouter le plan : " + plan.jiraWorkLogId + ", veuillez contrôler ses informations"
await notifications.addNotifications(db, key, message)
}
}
batch.set() 未正确对齐
【问题讨论】:
-
我认为 Firebase 云函数实际上是幕后的 GCP 云函数。如果这是真的,那么也许我们可以登录到您的 GCP 项目,然后查看 Cloud Logging 日志并查看 Cloud Logging 可能报告的内容。这可能会给我们更多的数据来处理。
-
我想我找到了 GCP 日志并且有 2 个不同的错误:1.
Error: socket hang up at connResetException2.Error: write EPROTO at WriteWrap.onWriteComplete [as completed] -
你试过增加hte函数的超时时间和内存分配吗?您可以直接在代码中或通过 GCP 控制台执行此操作
-
你的读/写必须按顺序发生吗?因为如果它们可以并行发生,使用 Promises 而不是 async / await 会更快
-
似乎很多读取和写入导致错误。请参考这个StackOverFlow thread。
标签: firebase google-cloud-firestore google-cloud-functions