在 firebase 云函数中使用 async/await

Using async/await inside firebase cloud functions

在 firebase 云函数中执行异步任务时,我是否需要为每个任务 await,如下例所示:

exports.function = functions.https.onCall(data,context)=>{
await db.doc('someCollection/someDoc').update({someField: 'someValue'})
await db.doc('someCollection/someDoc2').update({someField: 'someValue'})
await db.doc('someCollection/someDoc3').update({someField: 'someValue'})
return {}
}

或者我可以触发这些异步调用吗?鉴于我不需要 return 基于从这些任务接收到的数据到客户端的任何东西 就像下面的另一个例子:

exports.function = functions.https.onCall(data,context)=>{
 db.doc('someCollection/someDoc').update({someField: 'someValue'})
 db.doc('someCollection/someDoc2').update({someField: 'someValue'})
 db.doc('someCollection/someDoc3').update({someField: 'someValue'})
return {}
}

是的,作为执行函数的一部分,您需要等待所有异步工作完成。如果您不 return 承诺在所有工作完成时解决(当您正确使用 await 时异步函数会执行),异步工作很可能无法自行完成。

documentation 状态:

To return data after an asynchronous operation, return a promise. The data returned by the promise is sent back to the client.

您的第一个代码示例中缺少一个可以使 await 正常工作的 async 关键字:

exports.function = functions.https.onCall(async (data,context) => {
    db.doc('someCollection/someDoc').update({someField: 'someValue'})
    db.doc('someCollection/someDoc2').update({someField: 'someValue'})
    db.doc('someCollection/someDoc3').update({someField: 'someValue'})
    return {}
}