我有一个执行以下操作的Firebase Cloud功能:
const firestore = require('firebase-admin')
const functions = require('firebase-functions')
const regex = require('../../utils/regex')
exports = module.exports = functions.https.onCall((data, context) => {
if (!context.auth) {
throw new functions.https.HttpsError('failed-precondition', 'The function must be called while authenticated.')
}
if (!data['displayName']) {
throw new functions.https.HttpsError('failed-precondition', 'An display name must be provided.')
}
if (!regex.noSpecialCharactersExceptSpace.test(data['displayName'])) {
throw new functions.https.HttpsError('input-validation-failed', 'Your display name cannot have special characters in it.')
}
return firestore.firestore().collection('profiles').doc(context.auth.uid)
.update({
displayName: data['displayName']
})
.then(() => {
console.info('Successful public profile update user='+ context.auth.uid)
return { text: 'Your profile has successfully been updated' };
})
.catch((error) => {
console.error('Error updating public profile user=' + context.auth.uid + ' error=' + error)
throw new functions.https.HttpsError('failed-precondition', 'An error happened, our team will look into it.')
})
})
从我的前端,当我调用此函数时,它最多可能需要20到30秒才能完成并返回状态代码。这种延迟确实会破坏用户体验。
改善响应时间的最佳方法是什么?
测试
从用户界面直接调用Firestore可以快速解决问题。因此,问题似乎不太可能是我们这边的DNS。
从UI到Cloud Function的其他API调用(例如“邀请朋友”)可以快速解决,并且不受此错误的影响。
调用其他Cloud Function(不会返回Promise,但执行带有邮戳的电子邮件之类的操作)不受此故障的影响,并且也很快得到了解决。因此,问题似乎不在于Firebase项目(us-central1
)的位置。尽管尚未测试更改位置。
仅此功能发生故障。一个复制并粘贴到上面。
受影响的功能与我们的其他功能之间的唯一区别是,发生故障的功能会返回Firestore操作的承诺。