我有以下功能:
export function readUserData(userName, password) {
firebase.database().ref("users/" + userName).once("value").then(function (snap) {
//console.log(snap.val().salt);
var verification = passwordVerify(password, snap.val().salt);
//console.log(verification);
//console.log(snap.val().password);
console.log(snap.val());
return snap.exists() && snap.val().password === verification
? userAuth.located = snap.val()
: userAuth.located = false;
});
return userAuth.located;
}
我被告知 firebase.database().ref 是一个异步函数,它似乎是这样的,因为它在写入 console.log(snap.val()) 之前在 readUserData 的最后一行返回 userAuth. located ;
如何确保 firebase.database().ref... 在返回最终结果之前执行?我不确定如何在这段代码中实现等待/ promise ,因为整体功能不是异步的。
最佳答案
你应该返回 promise ,例如:
export function readUserData(userName, password) {
return firebase.database().ref("users/" + userName)
.once("value")
.then(function (snap) {
var verification = passwordVerify(password, snap.val().salt);
return snap.exists() && snap.val().password === verification
? snap.val()
: false;
});
}
然后,无论哪个代码调用此方法,也应该异步等待:
var userAuthLocated = await readUserData(userName, password);
或者,有 promise :
readUserData(userName, password)
.then(userAuthLocated => {
// use userAuthLocated here
});
关于javascript - 处理异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59256864/