Как проверить, существует ли документ в Firestore / Firebase и передать его в var или вернуть? - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу визуализировать изображение, когда документ в Firestore существует, но я не знаю, как вернуть значение функции .then в исходную функцию, и возвращение true или false не работает. Возвращаемое значение всегдаtrue.

            renderFollowIcon(email){
                if(
                firebase.firestore().collection("user").doc(this.state.currentUserEmail).collection("follows").doc(email).get()
                .then((docSnapshot) => {
                    if (docSnapshot.exists){
                        Alert.alert("hi")
                        return true;
                    }
                    Alert.alert("not hi")
                    return false;
                })){
                    return(
                        <TouchableOpacity onPress={() => this.unfollow(email)}>
                            <Image source={require("../assets/unfollow.png")} style={styles.FollowIcon}/>
                        </TouchableOpacity>
                    )
                }else{
                    return(
                        <TouchableOpacity onPress={() => this.follow(email)}>
                            <Image source={require("../assets/follow.png")} style={styles.FollowIcon}/>
                        </TouchableOpacity>
                    )
                }
            }

Вот новый код, но он все еще не работает:

                    var promise2 = Promise.resolve().then(firebase.firestore().collection("user").doc(this.state.currentUserEmail).collection("follows").doc(email).get()
                .then((docSnapshot) => {
                    if (docSnapshot.exists){
                        Alert.alert("hi")
                        return Promise.reject( true );
                    }else{
                        Alert.alert("not hi")
                        return Promise.reject( false );
                    }
                    return (check.promise)
                }))

@ DougStevenson

1 Ответ

0 голосов
/ 21 декабря 2018

Ваша функция renderFollowIcon всегда возвращается непосредственно перед выполнением любой работы в Firestore.Это связано с тем, что API-интерфейсы Firestore являются асинхронными и возвращают обещание, которое указывает, когда работа будет окончательно завершена.Вы должны использовать обещание, чтобы найти результаты любого запроса.

Вы не можете просто вернуть значение из асинхронного обратного вызова.Возможно, вам следует вместо этого вернуть обещание вызывающей стороне renderFollowIcon, чтобы сообщить им результаты любой асинхронной работы, которую вы выполняете в этой функции.

...