异步foreach反应式

时间:2019-01-06 23:40:55

标签: react-native pouchdb

我正在用react-native和pouchdb创建一个用于移动的聊天应用,然后我用socket.io和rethinkdb创建了一个服务器。在PouchDB中,我存储了用户之间的所有聊天,而在rethinkdb中,我存储了“脱机消息”。对于“脱机消息”,我的意思是已发送给不在线用户的消息(我在socket.io服务器中检查了消息)。

现在我遇到了问题。当用户打开应用程序时,我将看到async componentWillMount

async componentWillMount(){

    const value = await AsyncStorage.getItem("token");
    this.setState({ token: value });

    var self = this;
    await axios.get(server + '/index.php/api/TokenController/isValid', {headers: {Authorization: this.state.token}}).then((res) => {
        var resJson = JSON.parse(res.data);
        self.setState({userid: resJson.info.id});
    });
    await axios.get(server + '/index.php/api/FriendsController/getList', {headers: {Authorization: this.state.token}}).then((res) => {
        var resJson = JSON.parse(res.data);
        this.setState({friends: resJson.friends});
    });

    this.setState({loading: false});

    this.socket.emit('register', {connection_id: this.state.userid});
    await this.socket.on('hasMessages', data => Promise.all(data).then(res => {
        this.setState({offlineMessages: res});
        this.state.offlineMessages.forEach((v) => {
            console.log(v) // it stops to first iteration
        })
    }));
}

因此,用户登录后,我检查令牌是否为isValid,然后获得了好友列表。在那之后,我将我的用户注册到我的websocket,如果有针对我的用户的消息,我将发送“ hasMessage” (示例:

{
    "from_id":  "76" ,
    "id":  "e5f76ad6-761c-4637-a118-321a844a9634" ,
    "messages": {
        "1546799624050":  "Ciao" ,
        "1546799630274":  "Hola" ,
        "1546799633100":  "Hello" 
    } ,
   "to_id":  "1"
}

好的,我的用户有东西。因此,“ hasMessage”的响应就是这样。 现在,我必须执行两个循环(一个循环与数据有关,另一个循环与针对每个数据的消息有关,我必须为所有消息创建一个消息对象)。我怎样才能做到这一点?我使用的Promise有效,但是嵌套的forEach在第一次迭代时停止,当我重新加载应用程序时,我在控制台中看到了其他迭代。

我对async / await / Promise的要求不是很好,我只是在学习!

0 个答案:

没有答案