これを一般的なものにしようとすると、他の人を助けることができます。この質問は、私が約束のコンセプトに苦しんでいるほどです。Firebaseクエリー後の約束を返す
私はブール変数の値を返す関数を持っています。私のアイデアは、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
})
}
誰もがこれをアプローチする方法のための任意のアイデアを持ってそれを正しく返すように解決する約束のいくつかの並べ替えを使用しようとしましたか?私はを要約したバージョン質問は、すでに約束を返す関数(私はfirebaseデータベースのquerysが行うと信じている)内で約束を作成する方法です。私はそれが完全に解決するために "ForEach"ループを待たなければならないと思います。
うわー、ありがとう@ adrice727、はるかに良い解決策です... –
ありがとう、あなたは私の日を救った! – user1892203