gpt4 book ai didi

javascript - javascript+firebase函数在获取数据时,由于操作顺序不同导致返回值不正确,如何解决?

转载 作者:行者123 更新时间:2023-11-30 11:03:25 25 4
gpt4 key购买 nike

我目前正在实现一个 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。

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

最佳答案

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

关于javascript - javascript+firebase函数在获取数据时,由于操作顺序不同导致返回值不正确,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56665055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com