首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等到所有回调都调用完毕

等到所有回调都调用完毕
EN

Stack Overflow用户
提问于 2019-02-23 05:09:21
回答 1查看 96关注 0票数 2

我在react原生中有一个组件,可以显示用户的所有聊天记录。主逻辑必须在componentDidMount()中。这里是一个简化的版本:

代码语言:javascript
复制
componentDidMount(){
     ConnectyCube.chat.list({}, function(error, dialogs) {
        chats = dialogs.map(chat => {
            const opponentId = //some logic
            ConnectyCube.users.get(function(error, res){
                //some logic to populate chats 
            });
            }
        )

        this.setState({chats: chats})
        }
    );
}

换句话说,主要的问题是我不知道如何使用多个回调(每个回调对应于用户的每个聊天)来处理数据结构“聊天”,以便在结束时进行setState。也许,我的问题是,我正在以一种同步的方式思考,因为我对事件驱动的方法还不熟悉。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2019-02-23 05:42:26

这里有一种方法,您可以跟踪剩余请求的数量,并在它们全部完成时触发一些代码。请注意,这几乎就是Promise.all所做的。

代码语言:javascript
复制
//some kind of global or component level variable, tracks the number of pending requests left
var remaining = 0;

componentDidMount(){
     ConnectyCube.chat.list({}, function(error, dialogs) {
        // set remaining to how many dialogs there are
        remaining = dialogs.length;
        chats = dialogs.map(chat => {
            const opponentId = //some logic
            ConnectyCube.users.get(function(error, res){
                //some logic to populate chats

                // decrement remaining and check if we're done
                if (--remaining === 0) {
                  finalCallback(); // in here you do your setState.
                }
            });
            }
        )

        this.setState({chats: chats})
        }
    );
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54835218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档