【发布时间】:2017-05-07 11:09:11
【问题描述】:
试图将其概括为通用的,以便对其他人有所帮助。这个问题让我更加纠结于承诺的概念。
所以我有一个返回布尔变量值的函数。我的想法是从 Firebase 中提取一些数据,然后循环遍历这些值……然后将变量设置为 true(如果找到)。
我遇到的问题是,无论 ForEach 循环和查询是否完成,都会返回该值。我尝试使用某种承诺解析(在下面的代码片段中)正确返回它
export function CheckIfFriendsPending(id2){
var userID = getFirebase().auth().currentUser.uid
var indicator = false
var retri = function()
{
getFirebase().database().ref('members/' + userID + '/PendingFR').once('value').then(function(snap) {
console.log("~~~~~~~~~~~~~~~~~~go")
//if(result.hasOwnProperty('install_type'))
snap.forEach(function(childSnapshot) {
var childObject = childSnapshot.val()
if(childObject.hasOwnProperty('From')){
alert("OKAY")
if(childObject.From == userID && childObject.To == id2){
indicator = true
} else if(childObject.From == id2 && childObject.To == userID){
indicator = true
}
}
});
})
} // end retri
Promise.all(retri).then(function() {
return indicator
})
}
有人知道如何解决这个问题吗?我想一个总结版本的问题是如何在一个已经返回一个承诺的函数中创建一个承诺(我相信 firebase 数据库查询会这样做)。我想它也必须等待“ForEach”循环完全解决。
【问题讨论】:
标签: javascript firebase promise firebase-realtime-database