为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁华开满天机 2021-07-01 04:52:43
我目前正在实现一个 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。你能解释一下如何解决这个问题吗?
查看完整描述

2 回答

?
MM们

TA贡献1886条经验 获得超2个赞

正如 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);

})


查看完整回答
反对 回复 2021-07-08
  • 2 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信