繁体   English   中英

在 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 {}
}

还是我可以触发这些异步调用? 鉴于我不需要根据从这些任务收到的​​数据向客户端返回任何内容,如下面的另一个示例所示:

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 {}
}

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

文档指出:

要在异步操作后返回数据,请返回一个 Promise。 Promise 返回的数据被发送回客户端。

您的第一个代码示例中缺少的一件事是使 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 {}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM