我正在做一个项目,在其中我使用redux来管理具有笨拙中间件的应用程序。但是,当我从动作中调用下面的函数时,它给了我
var arr = ["ax", "mof", "4", "63", "42", "3", "10", "[", "23", "adidas", "ba", ")", "ABC"]
var symbols = "()[]{}!@#$%¨&*-_=+".split("");
function compare(array){
array.sort((a,b) => {
if (symbols.indexOf(a) > -1) a = "zzzzzzz"
if (symbols.indexOf(b) > -1) b = "zzzzzzz"
if (!isNaN(Number(a)) && !isNaN(Number(b))){
if (Number(a) > Number(b)){
return 1;
}else if(Number(a) < Number(b)){
return -1;
}else{
return 0;
}
}else{
if (a.toUpperCase() > b.toUpperCase()){
return 1;
}else if(a.toUpperCase() < b.toUpperCase()){
return -1;
}else{
return 0;
}
}
})
return array;
}
console.log(compare(arr))
代码
Possible Unhandled Promise Rejection (id: 0): Error: Cannot read property 'then' of undefined.
因此,当我运行1 export const submitEmail=(email)=>{
2 return(dispatch) =>{ // Still did not use dispatch
3 val = getData(email);
4 console.log(val);
5 }
6 };
7
8 const getData = async(email)=>{
9 let usersRef = await firebase.database().ref('Users')
10 usersRef.orderByChild('email').equalTo(email).on("value", (snapshot) => {
11 snapshot.forEach((snap) => {
12 return snap.val();
13 })});
14 }
函数时,submitEmail
的值会在出现此警告之前给我保证。
val
问题
我要等待,直到查询数据库并获取json格式的数据。
注意
发生这种情况是因为Promise {_40: 0, _65: 0, _55: null, _72: null}
没有返回承诺。但是,在评估firebase.database().ref('Users')
函数之后,如何在var
中获得line 4
的值?
答案 0 :(得分:0)
此代码:
firebase.database().ref('Users')
对数据库不执行任何操作。它仅创建对数据库中潜在/Users
引用的引用。这是一个纯粹的客户端操作,因此不需要返回承诺。
通过调用on()
或once()
从数据库加载数据。这两个once()
之间仅加载一次数据,并返回一个Promise。另一方面,on()
开始连续监听数据。由于这是一个连续的过程,因此它永远不会完成,因此on()
无法返回承诺。
您想要的东西可能是
export const submitEmail=(email)=>{
return(dispatch) =>{
val = getData(email);
console.log(val);
}
};
const getData = async(email)=>{
let usersRef = firebase.database().ref('Users')
let snapshot = await usersRef.orderByChild('email').equalTo(email).once("value")
let userSnapshot
snapshot.forEach((child) => {
userSnapshot = child
});
return userSnapshot
}