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

时间:2018-03-19 07:15:22

标签: firebase firebase-realtime-database firebase-cloud-messaging google-cloud-functions google-cloud-firestore

为了从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 } 
}

2 个答案:

答案 0 :(得分:1)

使用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());
     })
})

答案 1 :(得分:0)

当您获得包含import java.time.*; import java.time.temporal.*; class { public static void main(String[] arguments) { LocalDateTime now = LocalDateTime.now(); int Seconds = now.get(ChronoField.SECOND_OF_MINUTE); do{ \\ My Code is Here } while ( Seconds <= 00); 的文档时,必须从数据库中提取文档。因此,此操作是异步的,您必须等到收到文档后再迭代其数据。简而言之,它应该类似于以下内容:

.get

希望有所帮助。