我正在编写Firebase可以用TypeScript运行,下面是一个更新文档的简单方法。
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp(functions.config().firebase);
export const handleTestData = functions.firestore.document('test/{docID}').onCreate(async (snap, context) => {
const data = snap.data();
if (data) {
try {
await admin.firestore().doc('test1/' + context.params.docID + '/').update({duplicate : true});
} catch (error) {}
}
});
在这个方法中,promise是由async
await
处理的,没有return
语句,它工作得很好。我看到的大多数示例/教程都在每个方法中有一个return
语句。在Firebase Cloud Functions中不返回任何东西会有什么影响/区别吗?如果我应该返回一些东西,我可以返回null
吗?
1条答案
按热度按时间axr492tv1#
返回值在Firebase Cloud Functions中重要吗?
是的,它确实是key,在执行异步处理(也称为“后台函数”)的Cloud Function中,当所有异步处理完成时返回JavaScript promise,如documentation中所解释的那样。
这样做很重要,主要有两个原因(摘自该文档):
1.确保运行Cloud Function的Cloud Functions示例在您的函数成功达到其终止条件或状态之前不会关闭。
1.您可以避免运行时间过长或无限循环的云函数产生过多费用。
为什么即使您没有返回承诺,云函数也能正常运行?
通常,您的Cloud Function应该在异步操作完成之前终止,因为您没有返回Promise,因此向Cloud Functions平台指示它可以终止运行Cloud Function的Cloud Functions示例。
但有时候云函数平台并不会立即终止函数,异步操作也可以完成,这是完全无法保证的,也是完全无法控制的。
经验表明,对于短时间的异步操作,最后一种情况经常发生,开发人员认为一切正常。但是,突然有一天,云函数不工作......有时它确实工作:开发人员正面临着一个没有任何清晰逻辑的“不稳定”行为,这使得调试非常困难。你会在Stack Overflow中找到很多说明这种情况的问题。
所以具体来说,在你的情况下,你可以像这样调整你的代码:
或类似
返回
null
(或true
,或1
...)是有效的,因为async
函数总是返回Promise。