【问题标题】:Firebase Functions - NodeJS: Asynchronious Array handlingFirebase 函数 - Node JS:异步数组处理
【发布时间】:2017-10-26 18:54:56
【问题描述】:

我检查了许多帖子,但无法解决问题。 我想在继续之前返回数组。我尝试使用带有回调的函数,但也没有用。

我的代码如下:

exports.GetHelmets = functions.database.ref('onTrack/{userID}').onCreate(event => {
var helmets = [];

let userID = event.params.userID;

let friendRef = admin.database().ref("friends").child(userID);
friendRef.once("value").then(snapshot => {
    snapshot.forEach(function(snapshot2){
        let rider = snapshot2.val();
        let riderID = rider.id;

        let rhRef = admin.database().ref("User").child(riderID);
        rhRef.once("value", function(snapshot3){

            let rider2 = snapshot3.val();
            let helmetID = rider2.helmet;

        if (helmetID != "STANDARD"){
            if(helmets.indexOf(helmetID) < 0){
                helmets.push(helmetID);
            };
        };
    });
});
    return helmets;
}).then(helmets => {

    //WORK WITH ARRAY
});

希望你能帮助我,谢谢!

【问题讨论】:

    标签: node.js firebase firebase-realtime-database google-cloud-functions


    【解决方案1】:

    您希望最后一个 then() 获取所有内部数据,每个数据都需要自己调用 once()。在这种情况下,您需要使用Promise.all() 来等待所有onces。

    exports.GetHelmets = functions.database.ref('onTrack/{userID}').onCreate(event => {
    let userID = event.params.userID;
    
    let friendRef = admin.database().ref("friends").child(userID);
    friendRef.once("value").then(snapshot => {
        var promises = []l
        snapshot.forEach(function(snapshot2){
            let rider = snapshot2.val();
            let riderID = rider.id;
    
            let rhRef = admin.database().ref("User").child(riderID);
            promises.push(rhRef.once("value");
          });
        });
        return Promise.all(promises);
    }).then(snapshots => {
        var helmets = [];
    
        snapshots.forEach((snapshot) => {
            let rider2 = snapshot.val();
            let helmetID = rider2.helmet;
    
            if (helmetID != "STANDARD"){
              if(helmets.indexOf(helmetID) < 0){
                helmets.push(helmetID);
              };
            };
        });
        // WORK WITH helmets
    });
    

    【讨论】:

      猜你喜欢
      • 2018-12-12
      • 2018-05-15
      • 2020-06-01
      • 2016-02-07
      • 2019-02-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      相关资源
      最近更新 更多