第一次发布海报-对开发来说相当陌生,所以请原谅我的无知。感谢您的帮助。
我遇到了云功能的间歇性超时错误。有几件事需要知道。这些功能非常小,通常只需要150毫秒或更短的时间。超时错误只发生在冷启动时。超时错误并不是每次都会发生,可能8-10次中就有一次。我知道我应该回报一个承诺,如果我不知何故没有,请告诉我。
我的代码有问题吗,或者这是云功能的正常问题吗?
样本代码:
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp();
const db = admin.firestore();
exports.editCustomerHttp = functions.https.onCall((data, context) => {
let Customer = {
customerId: data.docId,
customerName: data.oldCustomerName,
}
const batch = db.batch();
const editCustomerRef = db.collection(data.orgName).doc(data.orgId).collection("Customers").doc(data.docId);
batch.update (editCustomerRef, {
customerName: data.newCustomerName,
customerNameSortBy: data.newCustomerNameSortBy,
})
const editDropdownRefOld = db.collection(data.orgName).doc(data.orgId);
batch.update (editDropdownRefOld, {
'ListOfCustomers': admin.firestore.FieldValue.arrayRemove(Customer),
})
return batch.commit()
.catch(error => {
console.error("New Customer Failed to be Edited", error)
})
})
我可以看到,在超时之前,您的执行花费了60004ms(60秒(。默认情况下,函数在1分钟后超时,但可以将此时间段延长至9分钟。我建议您仔细阅读本文档,因为它提供了有关如何在云函数中处理超时的更多详细信息。
下面的代码段包括计划在函数执行开始后2分钟执行的代码。如果超时恰好设置为1分钟,则此代码可能永远不会执行:
exports.afterTimeout = (req, res) => {
setTimeout(() => {
// May not execute if function's timeout is <2 minutes
console.log('Function running...');
res.end();
}, 120000); // 2 minute delay
};
避免函数超时的一个好方法是结合使用以下技术:
- 设置一个高于预期函数执行时间的超时
- 跟踪执行过程中剩余的时间,并尽早执行清理/退出