假设我有这样的云功能
export const setData = functions.https.onCall(async (data, context) => {
await admin.firestore().doc("myPath").set({data: "myData"})
return {success: true}
})
如果我不在乎Firestore Set调用是否成功, 我可以删除等待吗?因此该函数可以更早返回并减少CPU使用时间。
export const setData = functions.https.onCall(async (data, context) => {
admin.firestore().doc("myPath").set({data: "myData"})
return {success: true}
})
答案 0 :(得分:1)
如果删除等待,将会遇到问题。如果没有它,该函数将立即以返回值返回,而无需等待set()完成。该功能将与所有尚未完成的异步工作一起终止。
对于可调用函数,该函数必须返回一个仅在所有异步工作完成后才能解析的承诺。在您的情况下,使用await关键字即可实现。
答案 1 :(得分:0)
这比Firebase本身更像JS问题。
如果您真的不在乎,那没问题,但是即使您可以正常调用该函数作为返回,您也从不知道是否返回了任何内容可能只是在Firebase调用完成之前完成所有操作。
“返回得更早,减少了CPU使用时间。”
使用更少的CPU可能只是信号,表明您的功能无法正常工作。
此外,Firebase确实是快速且可扩展的,我总是建议使用then/catch
来保持执行并捕获错误,甚至只是出于日志目的。像这样:
admin.firestore().doc("myPath").set({data: "myData"}).then(response => {
return whateverYouWant(response)
}).catch(err => {
return handleWhateverError(err)
})
此外,如果该函数中不再包含async
,则无需保留await
。