【问题标题】:How to resolve/return a forEach function in Cloud Functions如何在 Cloud Functions 中解析/返回 forEach 函数
【发布时间】:2017-11-24 09:58:01
【问题描述】:

我有以下(示例)数组:

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 的云函数示例。 任何帮助都会很棒!

【问题讨论】:

    标签: javascript firebase google-cloud-functions google-cloud-firestore


    【解决方案1】:

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

    相反,您应该将 all 来自 all 更新的 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')
        })
      })
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 2019-09-14
      • 1970-01-01
      • 2020-09-12
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多