gpt4 book ai didi

javascript - Firebase 查询后返回 Promise

转载 作者:行者123 更新时间:2023-12-03 23:14:50 24 4
gpt4 key购买 nike

试图把它作为一般性,以便它可以帮助其他人。这个问题让我更加纠结于 promise 的概念。

所以我有一个返回 bool 变量值的函数。我的想法是从 Firebase 中提取一些数据,然后循环遍历这些值……然后将变量设置为 true(如果找到)。

我遇到的问题是无论 ForEach 循环和查询是否完成,都会返回该值。我尝试使用某种 promise 解析(在下面的代码片段中)正确返回它

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
})
}

任何人都知道如何解决这个问题?我猜是 总结版问题是如何在已经返回 promise 的函数中创建 promise (我相信 firebase 数据库查询会这样做)。我想它也必须等待“ForEach”循环才能完全解决。

最佳答案

我认为 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();
});
});
}

然后你可以调用:
CheckIfFriendsPending(id2)
.then(function() { console.log('Yes'); })
.catch(function() { console.log('No'); });

这是一个简单的工作 example .

关于javascript - Firebase 查询后返回 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41272734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com