gpt4 book ai didi

javascript - 如何在 Cloud Functions 中解析/返回 forEach 函数

转载 作者:行者123 更新时间:2023-12-01 02:42:31 25 4
gpt4 key购买 nike

我有以下(示例)数组:

pages = [ {
"name" : "Hello",
"id" : 123
},{
"name" : "There",
"id" : 987
},{
"name" : "Great",
"id" : 555
} ];

我想将此数组中的每个对象保存为集合中的文档。因此我有以下功能:

exports.testSaveFacebookPages = functions.https.onRequest((req, res) => {
cors(req, res, () => {
let userUid = req.body.uid

// pages array is available here...

const PagesRef = admin.firestore().collection(`/users/${userUid}/pages/`)
return pages.forEach(function(page, index){
PagesRef.doc(`p${index}`).update(page, { merge: true })
});

res.status(200).send('Pages saved successfull!');
}); // cors...
}); // exports...

当函数执行时,它会将页面保存到 Firestore :)但似乎该函数是在循环中执行的。日志记录说:

Function execution started
Function execution took 60002 ms, finished with status: 'timeout'

我读过:Cloud Functions with Firestore error "Dealine Exceeded"https://firebase.google.com/docs/functions/terminate-functions

但我找不到任何带有 forEach 的云函数示例。任何帮助都会很棒!

最佳答案

在发送响应之前,您将退出函数。如果您从不发送响应,您的 HTTPS 功能将会超时。

相反,您应该将所有更新中的所有 promise 收集到一个数组中,然后等待所有这些 promise 解决,然后再发送最终响应。像这样的事情:

exports.testSaveFacebookPages = functions.https.onRequest((req, res) => {
cors(req, res, () => {
let userUid = req.body.uid

const PagesRef = admin.firestore().collection(`/users/${userUid}/pages/`)
const promises = []
pages.forEach(function(page, index){
const promise = PagesRef.doc(`p${index}`).update(page, { merge: true })
promises.push(promise)
})

Promise.all(promises)
.then(results => {
res.status(200).send('Pages saved successfull!')
})
.catch(error => {
res.status(500).send('error')
})
})
})

关于javascript - 如何在 Cloud Functions 中解析/返回 forEach 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47470690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com