Firebase 火基返回未进料

Firebase 火基返回未进料,firebase,promise,google-cloud-firestore,google-cloud-functions,Firebase,Promise,Google Cloud Firestore,Google Cloud Functions,我一直得到一个返回函数未定义的响应。一秒钟后,console.log显示信息。我的猜测是,数据仍在收集中,函数已经返回。我原以为可以通过承诺来解决,但事实并非如此。我错过了什么?为什么我的函数返回时没有任何数据 TakenSpaces = 0 let startDate = new Date(time) startDate.setHours(0) startDate.setMinutes(0) let endDate = new Date(startDat

我一直得到一个返回函数未定义的响应。一秒钟后,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
}

我知道这很有效。但是如果有人知道函数是否只能在完成所有操作后返回,而不必返回承诺函数

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)
    })
我会说去买东西。像
函数async getTakenCapacity..
和inside
const reservations=wait db.collection(..
)。函数将等待承诺得到解决,并将保留分配给其结果。然后您可以同步进行,操作结果并返回所需内容。
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"
  })