为了从火堆中获取数据,我查询了一个文档并将该数据放入变量中。现在,我需要在代码的其他部分使用该变量。当我使用该变量时,它不会获得任何数据.如何解决这些错误。
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) {
//...
}
}
});
希望有帮助。