Почему возврат не определен?а как решить? - PullRequest
1 голос
/ 19 сентября 2019

Я пытаюсь присвоить значение моментального снимка переменной, чтобы иметь возможность включить его в список, поэтому он продолжает возвращаться неопределенным.Значения childItem (childItem.name и т. д.) добавляются правильно, только profile.userName, который возвращается как неопределенное. Я использую реагировать native + firebase. Я пробовал несколько способов решить, что я не получаю.

constructor(props) {
    super(props);
    this.state = {
        list: []

    };
    firebase.database().ref('pets/lost').on('value', (snapshot) => {
        let state = this.state;
        state.list = [];

        snapshot.forEach((childItem) => {


            var profile =  firebase.database().ref('/users/' + childItem.val().userUid + '/profile').on('value', (snapshot) => {
                   return{
                       userName: snapshot.val().name
                   }

              });
            alert('nome ' + profile.userName);
            state.list.push({
                key: childItem.key,
                userName: profile.userName,
                name: childItem.val().name,
                breed: childItem.val().breed
            });

        });


        this.setState(state);

    });

}



render() {
    return (
        <View>
            <FlatList
                data={this.state.list}
                renderItem={({ item }) => {
                    return (
                        <View style={styles.publiInfoContainer}>

                            <Image
                                style={styles.avatar}
                                source={{ uri: 'https://i.kinja-img.com/gawker-media/image/upload/s--HqfzgkTd--/c_scale,f_auto,fl_progressive,q_80,w_800/wp2qinp6fu0d8guhex9v.jpg' }}
                            />

                            <View style={styles.textPubliInfo}>
                                <Text style={styles.name}>{item.userName}</Text>
                                <Text style={styles.date}>14/10/1997</Text>
                            </View>


                        </View>

                    );
                }}

            />

        </View>
    );
}

}

1 Ответ

2 голосов
/ 19 сентября 2019

Попробуйте переместить код туда, куда вы пытаетесь получить доступ, и использовать profile.username внутри внутренней части при обратном вызове value для обработки асинхронного характера функциональности.

          firebase.database().ref('/users/' + childItem.val().userUid + '/profile').on('value', (snapshot) => {
             const userName = snapshot.val().name;    
             alert(userName);
             state.list.push({
                key: childItem.key,
                userName,
                name: childItem.val().name,
                breed: childItem.val().breed
             });
                this.setState(state);
          });
...