Javascript 如何从承诺中返回值 var座位; var emp=db.collection('BookedTicketData').get()。然后((快照)=>{ snapshot.docs.forEach((doc)=>{ var data=doc.data() console.log(data.AllSeat); seat=data.AllSeat }) }) 座位费((val)=>{ 对于(i=1;i

Javascript 如何从承诺中返回值 var座位; var emp=db.collection('BookedTicketData').get()。然后((快照)=>{ snapshot.docs.forEach((doc)=>{ var data=doc.data() console.log(data.AllSeat); seat=data.AllSeat }) }) 座位费((val)=>{ 对于(i=1;i,javascript,firebase,promise,google-cloud-firestore,Javascript,Firebase,Promise,Google Cloud Firestore,您可以尝试在中移动逻辑,然后: 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.f

您可以尝试在
中移动逻辑,然后

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;
var emp=db.collection('BookedTicketData').get()。然后((快照)=>{
var席位;
snapshot.docs.forEach((doc)=>{
var data=doc.data()
console.log(data.AllSeat);
seat=data.AllSeat
})
返回座位;
}).然后(座位=>{
座位费((val)=>{
让html=''

对于(i=1;i使用async Wait语法来解析您的承诺。实际上,您的代码中发生的是seat。在为seat分配一个值之前,会运行forEach,这就是为什么它是未定义的。请像这样更改您的代码

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

确保在异步函数中使用wait,否则它将无法工作

我再次应用了此代码,但现在复选框不可选择

var seat;
var emp = await  db.collection('BookedTicketData').get(); 
var emp=db.collection('BookedTicketData').get()。然后((快照)=>{
snapshot.docs.forEach((doc)=>{
var data=doc.data()
seat=data.AllSeat
})
}).然后(()=>{
对于(j=1;j{
var data=doc.data()
console.log(data.AllSeat);
seat=data.AllSeat
})
现在可以了
座位费((val)=>{

对于(i=1;我可以回答你的问题吗?你不能,也不必。将逻辑移到
中,然后
。尝试使用
async/await
让我试试这个method@DivyanshuBhaskar您的复选框现在是否工作?您是否可以检查复选框是否根据您的代码正确插入到dom中。您是否可以检查checK框是否正确?是的,现在复选框工作正常,但我已通过不同的方法完成了操作问题出在哪里?
   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;