【问题标题】:Firebase returning undefinfedFirebase 返回未定义
【发布时间】:2020-01-31 21:08:20
【问题描述】:

我不断收到返回函数未定义的响应。一秒钟后,console.log 会显示信息。我的猜测是数据仍在收集中并且函数已经返回。我以为它会通过一个承诺来解决,但事实并非如此。我错过了什么?为什么我的函数返回时没有任何数据?

    TakenSpaces = 0
    let startDate = new Date(time)
    startDate.setHours(0)
    startDate.setMinutes(0)
    let endDate = new Date(startDate)
    endDate.setHours(24)
    data = []
    const reservations = db.collection('organisation').doc('Amigos').collection('reservations')
    .where('start', '>=', startDate)
    .where('start', '<=', endDate).get()
    console.log('promse made')
    reservations.then((docs) => {
      // console.log(docs.data())
      // return docs.data()
      // const promises = []
      docs.forEach((doc) => {
        data.push(doc.id)
      })
      // console.log(data)
      // console.log('DONE TESTING')
      return data
        // return Promise.all(promises)
    })
    .then((test) => { console.log(test); return test })
  // for (const reservation of reservations) {
  //   console.log(reservation)
  // }
    // .then((docs) => {
    //   // for (const doc of docs) {
    //   //   console.log(doc.id)
    //   // }
    //   docs.forEach((doc) => {
    //     if (doc.data().people){
    //       const people = doc.data().people
    //       TakenSpaces = TakenSpaces + people
    //     }
    //     // console.log(doc.data().people)
    //   });
    //   return TakenSpaces
    // })
  // return TakenSpaces
}
  const t = getTakenCapacity(time)
  console.log(t)

【问题讨论】:

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


    【解决方案1】:

    知道它的工作原理。但是如果有人知道该函数是否只能在一切完成后返回,而不必返回一个承诺函数。

    function getTakenCapacity (time) {
        TakenSpaces = 0
        let startDate = new Date(time)
        startDate.setHours(0)
        startDate.setMinutes(0)
        let endDate = new Date(startDate)
        endDate.setHours(24)
        data = []
        const reservations = db.collection('organisation').doc('Amigos').collection('reservations')
        .where('start', '>=', startDate)
        .where('start', '<=', endDate).get()
        return reservations.then((docs) => {
          // console.log(docs.data())
          // return docs.data()
          // const promises = []
          var dd = new Array
          docs.forEach((doc) => {
            data.push([[time], doc.data().people])
          })
          // console.log(data)
          // console.log('DONE TESTING')
          return data
            // return Promise.all(promises)
        })
    
      getTakenCapacity(time).then(function(result) {
        console.log(result) // "Some User token"
      })
    

    【讨论】:

    • 我会说去async/await的东西。像function async getTakenCapacity .. 和内部const reservations = await db.collection(..。该函数将等到 promise 被解决,并且预留将被分配它的结果。然后您可以同步进行,操作结果并返回您需要的内容。
    猜你喜欢
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 2015-01-02
    • 2018-03-28
    • 1970-01-01
    相关资源
    最近更新 更多