【问题标题】:Reactive cocoa forcing a synchronous function to wait for reactive callback反应性可可强制同步函数等待反应性回调
【发布时间】:2018-09-26 05:27:59
【问题描述】:

我做了很多研究,但没有得到任何答案。

这是我的代码:

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”。

感谢您的帮助。

【问题讨论】:

    标签: reactive-cocoa reactive-swift


    【解决方案1】:

    first() function 基本上会为您执行此操作:

    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,它将getChannelNameconnectTo 生产者连接成一个更大的生产者。

    【讨论】:

    • 非常感谢!会试试的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2022-01-09
    • 2022-06-29
    • 2016-11-14
    相关资源
    最近更新 更多