reactive-cocoa - 反应性可可强制同步函数等待反应性回调
问题描述
我做了很多研究,但没有得到任何答案。
这是我的代码:
fileprivate var dispose: ScopedDisposable<AnyDisposable>?
func connectToServer() {
...
let user = ...
let channelName = getChannelName(user)
self.connector.connectTo(channelName)
}
func getChannelName(_ user: String) -> String {
var channelName: String = ""
self.dispose = ScopedDisposable(
self.service.requestChannelNameFromServerForUser(user)
.startWithValues({ results in
channelName = results[0].channelName
})
)
return channelName // this will return "" because callback hasn't returned yet
}
我试图找到一种方法让函数“getChannelName”等到从反应请求(来自另一台服务器)中检索到“channelName”。
谢谢你的帮助。
解决方案
该first()
功能本质上将为您执行此操作:
func getChannelName(_ user: String) -> String {
let result = self.service.requestChannelNameFromServerForUser(user).first()
if let results = result?.value {
return results[0].channelName
}
else {
// The producer returned no values or an error. Return a default value or throw error or something.
return ""
}
}
但更惯用的方法是让connectToServer
自己成为一个异步SignalProducer
的,将生产者getChannelName
和connectTo
生产者连接成一个更大的生产者。
推荐阅读
- python - 仅在需要时传递参数
- python - 在python中访问n维矩阵的第j维
- android - 错误转换 observable.subscribe
- python - 如何使用数组作为密集层的输入
- python - 将 CREATE TABLE、ADD COLUMNS、PRIMARY KEY、AS SELECT 和 WHERE 组合到一个操作中
- ftp - IIS 7.5 svchost.exe(ftpsvc) 100% cpu
- maven - 在我的工作站上重复 Jenkins groovy yaml 读写
- python - 如何让套接字继续侦听客户端并不断从客户端打印信息
- angularjs - 从 ui-router legacy 升级到 1.0.18,会导致未知错误。如何修复或调试?
- corda - Corda 3.1 - 发现哪些节点已关闭且未运行