Joe*_*cio 4 javascript promise firebase firebase-realtime-database
试图使其成为一般,以便它可以帮助其他人.这个问题更让我在承诺的概念上挣扎.
所以我有一个函数返回一个布尔变量的值.我的想法是从Firebase中提取一些数据,然后我循环遍历值...然后将变量设置为true(如果找到).
我遇到的问题是,无论ForEach循环和查询是否完整,都将返回该值.我尝试使用某种承诺解析(在下面的代码snippit中)来正确地返回它
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
})
}
Run Code Online (Sandbox Code Playgroud)
任何人都知道如何处理这个问题?我想一个总结版本的问题是如何在已经返回promise的函数中创建一个promise(我相信firebase数据库查询会这样做).我想它必须等待"ForEach"循环完全解决.
adr*_*727 10
我认为CheckIfFriendsPending应该回复Promise:
export function CheckIfFriendsPending(id2) {
return new Promise(function (resolve, reject) {
var userID = getFirebase().auth().currentUser.uid;
var indicator = false;
getFirebase().database().ref('members/' + userID + '/PendingFR').once('value')
.then(function (snap) {
function userMatch(user) {
if (!!user.From && user.From === userID && (user.To === id2 || user.To === userID)) {
return resolve();
}
}
snap.forEach(function (childSnapshot) {
var childObject = childSnapshot.val();
userMatch(childObject);
});
return reject();
});
});
}
Run Code Online (Sandbox Code Playgroud)
然后你可以打电话:
CheckIfFriendsPending(id2)
.then(function() { console.log('Yes'); })
.catch(function() { console.log('No'); });
Run Code Online (Sandbox Code Playgroud)
这是一个简单的工作示例.
| 归档时间: |
|
| 查看次数: |
10374 次 |
| 最近记录: |