【发布时间】:2017-06-01 07:42:39
【问题描述】:
我在下面提供的代码中有一系列嵌套的完成块。这是因为我需要在后台发出单独的网络请求以抽象数据以用于下一个方法,该方法提供另一个完成块,依此类推。有没有办法解决?非常感谢任何提示!
func fetchNearbyUsers(forCurrentUser user: User, completionHandler: usersCompletionHandler?) {
self.fetchAllUsers(completionHandler: { (users: [User]) in
ChatProvider.sharedInstance.fetchAllChatrooms(completionHandler: { (chatrooms: [Chatroom]) in
self.validateNewUsers(currentUser: user, users: users, chatrooms: chatrooms, completionHandler: { (validUsers: [User]) in
guard validUsers.isEmpty == false else {
completionHandler?([])
return
}
completionHandler?(validUsers)
})
})
})
}
【问题讨论】:
-
它不会改变你正在做的事情的逻辑 - 但它可以通过从完成处理程序中对下一步进行函数调用来使其更具可读性,并单独拥有代码
-
你也可以查看 PromiseKit
-
感谢大家的帮助和资源!
-
您还可以使用 DispatchQueues 顺序运行您的网络请求。不过,我也推荐使用 PromiseKit,一旦你掌握了它,它比任何内置的处理异步请求的方式都要强大和方便。
标签: swift nested completionhandler