javascript+firebase 函数在检索数据时,由于操作顺序不同,返回值不正确,如何解决?

我目前正在实现一个 javascript 函数来判断用户 ID 和名称是否匹配。


function name_match(user_id, user_realname) {

    var dbref = firebase.database().ref();

    var namesref = dbref.child("names");

    namesref.on("value", function(snapshot) {

        snapshot.forEach(i => {

            if(i.key == user_id && i.child("realname").val() == user_realname) {

                return true;

            }

        });

    });

    return false;

}

但是,无论输入如何,它最初都会返回 false。我认为这是因为它会在加载 firebase 数据时“返回 false”。


所以,即使最终返回true,由于第一次返回值为false,它会导致这样的问题(在另一个函数中)。


function name_match2() {

    var user_id = document.getElementById("user-id").value;

    var user_realname = document.getElementById("user-realname").value;

    if(!name_match(user_id, user_realname)) return -1;

    return 0;

}

它会返回-1。


你能解释一下如何解决这个问题吗?


繁华开满天机
浏览 185回答 2
2回答

MM们

正如 Daniel 在评论中所解释的那样,外部函数永远不会返回 true。异步解决方案可能是这些:)function name_match(user_id, user_realname) {    return new Promise(function (resolve, reject) {      var dbref = firebase.database().ref();      var namesref = dbref.child("names");      namesref.on("value", function(snapshot) {          var matched = false;          snapshot.forEach(i => {              if(i.key == user_id && i.child("realname").val() == user_realname) {                  matched = true;              }          });          if (matched) {             resolve()          } else {             reject()          }      });    });}在调用函数的另一边name_match('userId', 'userName').then(function(){//matched}, function(){//unmatched}); 其他方法是使用回调:function name_match(user_id, user_realname, cb) {      var dbref = firebase.database().ref();      var namesref = dbref.child("names");      namesref.on("value", function(snapshot) {          var matched = false;          snapshot.forEach(i => {              if(i.key == user_id && i.child("realname").val() == user_realname) {                  matched = true;              }          });          cb(matched);    });}在这种情况下:name_match('userId', 'userName', function(matched) {    console.log(matched);})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript