【问题标题】:Javascript Firebase RealTime Database Completion BlockJavascript Firebase 实时数据库完成块
【发布时间】:2022-01-31 01:03:42
【问题描述】:

我正在尝试了解 firebase-realtime-database。我能够获取数据,但我不知道如何添加完成块。我的意思是,是否有一个功能可以检查我的数据提取查询何时完成?

function getData() { 
  firebase.database().ref('SectionNames').once('value', function(names) {    
    names.val().forEach(function(sectionname) { 
      firebase.database().ref('Sections').child(sectionname).once('value').then( function(child)  

      //code

    });   
   });
  });
 //Completion block or a method to call processData() after I get all the sections
}

function processData() {
 //call this function after you get all the sections
}

非常感谢!

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    once() 方法也返回一个 Promise,因此您可以使用通常的 Promise 处理逻辑(then()/catch()try/catch)。

    例如:

    function getData() async { 
      let names = await firebase.database().ref('sections').once('value');
      processData(names);
    }
    

    更新:由于您现在更新了代码以显示循环中有多个once 调用,因此您可以使用Promise.all

    function getData() { 
      firebase.database().ref('SectionNames').once('value', function(names) {    
        let promises = [];
        names.val().forEach(function(sectionname) { 
          promises.push( 
            firebase.database().ref('Sections').child(sectionname).once('value')
          );
        });   
        Promise.all(promises).then((snapshots) => {
          processData(snapshots);
        });
      });
    }
    

    【讨论】:

    • 非常感谢,但我必须编辑我的问题。有一个嵌套查询。
    • 您可以计算是否已加载所有数据,也可以使用Promise.all 等到所有once() 调用完成。
    • 非常感谢。我想我已经明白了。
    • 很高兴听到。展望未来,请不要大幅更改您问题中的原始代码,因为我的回答的第一部分现在对未来来到这里的开发人员毫无意义。相反,请在问题底部的更新中添加澄清代码。
    • 哦,是的。我将对我的帖子进行更改。再次感谢您。
    猜你喜欢
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多