Как вернуть значение из Обещания - PullRequest
1 голос
/ 03 мая 2020
var seat;
var emp = db.collection('BookedTicketData').get().then((snapshot) => {
    snapshot.docs.forEach((doc) => {
        var data = doc.data()
        console.log(data.AllSeat);
        seat = data.AllSeat
    })
})

seat.forEach((val) => {
    for(i = 1; i<=37;i++){
        if(val == i){
            html += `
                <input type="checkbox" class="dn checkme" name="s-size" id="${j}"  value="${j}"/>
                <label for="${j}" class="col-2 br-pill f7 m-1 btn text-dark bg-white border-dark grow">${j}</label>
            `
        }
    }
})

document.getElementById('loader').innerHTML = html;

Я применил этот код, чтобы получить значение seat из firebase, и это массив, я сопоставляю это значение с al oop, но я получаю неопределенное значение seat вне этой функции.

Ответы [ 2 ]

1 голос
/ 03 мая 2020

Вы можете попробовать переместить логи c внутрь then:

var emp = db.collection('BookedTicketData').get().then((snapshot) => {
  var seat;
  snapshot.docs.forEach((doc) => {
    var data = doc.data()
    console.log(data.AllSeat);
    seat = data.AllSeat
  })
  return seat;
}).then(seat => {
  seat.forEach((val) => {
    let html = ''
    for (i = 1; i <= 37; i++) {
      if (val == i) {
        html += `
                <input type="checkbox" class="dn checkme" name="s-size" id="${j}"  value="${j}"/>
                <label for="${j}" class="col-2 br-pill f7 m-1 btn text-dark bg-white border-dark grow">${j}</label>
            `
      }
    }
    document.getElementById('loader').innerHTML = html;
  })
})

0 голосов
/ 03 мая 2020

используйте asyn c Синтаксис await для разрешения вашего обещания. На самом деле в вашем коде происходит следующее: seat.forEach запускается до того, как seat присваивает значение, поэтому оно не определено. Измените свой код следующим образом ...

var seat;
var emp = await  db.collection('BookedTicketData').get(); 

убедитесь, что в асин * используется await Функция 1009 *, иначе она не будет работать.

Я снова применил этот код, но теперь флажок не установлен

   var emp = db.collection('BookedTicketData').get().then((snapshot) => {
                                            snapshot.docs.forEach((doc) => {
                                                var data = doc.data()
                                                seat = data.AllSeat
                                            })
                                        }).then(() => {
                                            for (j = 1; j <= 37; j++) {

                                                html += `
                                                    <input type="checkbox" class="dn checkme" name="s-size" id="${j}"  value="${j}"/>
                                                    <label for="${j}" class="col-2 br-pill f7 m-1 btn text-dark bg-white border-dark grow">${j}</label>
                                                        `

                                        }


                                        document.getElementById('loader').innerHTML = html;


 emp.docs.forEach((doc) => {
                     var data = doc.data()
                     console.log(data.AllSeat);
                     seat = data.AllSeat
                   })


 this will work now

  seat.forEach((val) => {
                 for(i = 1; i<=37;i++){
                     if(val == i){
                               html += `
                          <input type="checkbox" class="dn checkme" name="s-size" id="${j}"  value="${j}"/>
               <label for="${j}" class="col-2 br-pill f7 m-1 btn text-dark bg-white border-dark grow">${j}</label>

                         `
                     }
                 }
       })
   document.getElementById('loader').innerHTML = html;
...