您如何从逻辑上验证Firebase'child_added'数据是否存在并提供处理逻辑?

我有逻辑,需要在查找现有子节点时进行检查。如果找到了该节点,则需要引用该密钥等。如果找不到,则需要以编程方式执行其他操作。我已经读过其他文章,说使用snap.exists()来确定这一点……我已经在下面的代码中尝试过。但是由于某些原因,该代码会跳过此引用,并且不会运行内部逻辑。


如果将“ child_added”更改为“ value”,它将运行现有代码,但其中不包含我从子节点中需要的snap.key值。


必须有简单的方法对此进行编码吗?


    firebase.database().ref('users').child(props.currentUser.uid).child('traits').orderByChild('field').equalTo(traitName).once('child_added', snap => {


    if (snap.exists())

    {

        console.log('found');

    } 

    else{

        console.log('did not find');

    }

}).then(() => {

    runprocess(traitName, traitValue);

});


撒科打诨
浏览 119回答 1
1回答

芜湖不芜

just不能确定是否没有数据child_*,您将需要一个value侦听器。要处理value事件获得的多个子代,可以使用:firebase.database().ref('users').child(props.currentUser.uid).child('traits').orderByChild('field').equalTo(traitName).once('value', snapshot => {  if (snap.exists()) {    console.log('found');    snapshot.forEach(function(child) {       console.log(child.key);     })  }   else{    console.log('did not find any children');  }})如果您只关心是否存在任何子项,而又不需要其他子项,则可以将查询限制为一个结果:firebase.database().ref('users')     .child(props.currentUser.uid).child('traits')     .orderByChild('field').equalTo(traitName)     .limitToFirst(1)     .once('value', snapshot => {但是您仍然需要在forEach这里进行调用,因为API不知道只会有结果-或至少在这种情况下没有重载。您还可以结合child_*和value事件。Firebase仅在幕后检索一次数据,因此对同一数据使用多个侦听器不会有任何损失。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript