如何在云功能中解析/返回foreach函数



i具有以下(示例)数组:

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'

我已经阅读了:云功能具有Firestore错误的"交易超过"and https://firebase.google.com/docs/functions/terminate-functions

但是我找不到任何foreach的云功能示例。任何帮助都很棒!

在发送响应之前,您要退出功能。如果您从未发送响应,则您的HTTPS功能会超时。

相反,您应该收集 all all> all 的承诺将更新到数组中,然后等待所有这些都可以解决,然后再发送最终响应。这样的东西:

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')
    })
  })
})

最新更新