所以我研究了Promises并得出结论,通过使用.then
,它将实际执行"里面的异步函数。然后,我继续更新我的代码:
function getCurrentKey(){
return tailorRef.once('value').then(function(data){
data.forEach(function(childData){
if ( (loggedUname == childData.val().tUsername) && (loggedPword == childData.val().tPassword) ){
Ukey = childData.key;
}
});
return Ukey;
});
}
currentKey = getCurrentKey();
console.log("key = " + currentKey);

注意:var currentKey是全局的
控制台中的预期输出为key = "some unique key"
,而是显示key = [object Promise]
。我试图将.val()
放在childData.key
之后实际获取值而不是对象,但它没有用。
我的Promise实现或其结构有问题吗?或者我的结论是错的?
答案 0 :(得分:0)
因为第一次返回发生在执行resolve
部分之前。
如果您真的想打印currentKey,请执行以下操作。
function getCurrentKey(){
tailorRef.once('value').then(function(data){
data.forEach(function(childData){
if ( (loggedUname == childData.val().tUsername) && (loggedPword == childData.val().tPassword) ){
currentKey = childData.key;
printCurrentKey(currentKey);
}
});
});
}
printCurrentKey(key){
console.log(key)
}
注意:在调用printCurrentKey
时请注意范围。