Firestore 查询:获取数据并将其存储到变量中.如何在云函数中使用该变量



为了从火堆中获取数据,我查询了一个文档并将该数据放入变量中。现在,我需要在代码的其他部分使用该变量。当我使用该变量时,它不会获得任何数据.如何解决这些错误。

var d1;
                    var getdata = respond.get()
                                    .then(doc =>{
                                    if(!doc.exists){
                                    console.log('No such document');
                                    }else{
                                    console.log('Document data:', doc.data());
                                     d1 = doc.data();// In d1 I am  not getting the data of that document 
                                    }
                                    }).catch(err => {
                                    console.log('Error getting documnet', err);
                                    });

在 for 循环中,我使用的是 d1 变量。但它没有执行这些 for 循环

for(var k in d1){
                     var p = d1[k].PhoneNumber;
                     let rph = respond.where(receiverph ,"==", p)
                                    .set({
                                    Status : status
                                    });
                                    let payload = {
                                        notification : {
                                        title: "Message",
                                        body: msg,
                                         sound:"default",
                                         }
                                    };
                                    console.log(payload);
                                    return admin.messaging().sendToDevice(token,payload).then((response) =>{
                                    console.log(token);
                                    console.log("Successfully sen notification");
                                    }).catch(function(error){
                                    console.warn("Error sending notification",error);
                                    });

                     }

                    });

在 d1 中,数据是

{ Invite2: { PhoneNumber: 917893659558, Amount: 33 },
  Invite1: { PhoneNumber: 917799266509, Amount: 33 },
  Invite3: { Amount: 33, PhoneNumber: 918639146409 } 
}

使用 Promisse.all

let promise = [];
let all = [];
for(var k in d1){
    var p = d1[k].PhoneNumber;
    let rph = respond.where(receiverph ,"==", p)
        .set({ Status : status });
        let payload = {
            notification : {
            title: "Message",
            body: msg,
                sound:"default",
                }
        };
        console.log(payload);
        return admin.messaging().sendToDevice(token,payload).then((response) =>{
        console.log(token);
        console.log("Successfully sen notification");
        }).catch(function(error){
        console.warn("Error sending notification",error);
        });
    }
    promise.push(rhp);
});
Promise.all(promise).then((data)=>{
     data.forEach(query => {
       query.forEach(res=>{
          all.push(res.data());
     })
})

当你得到一个带有.get的文档时,必须从数据库中获取该文档。因此,此操作是异步的,您必须等到收到文档后才能循环访问其数据。简而言之,它应该看起来像下面这样:

some_doc_ref.get().then(doc => {
  if (doc.exists) {
    var d1 = doc.data();
    for(var k in d1) {
      //...
    }
  }
});

希望有帮助。

相关内容

  • 没有找到相关文章

最新更新