如何在闭包中 return single.deferred

How to return single.deferred in closure

我做错了什么?如何从闭包中获取 Single? 我如何从 Alamofire.request 中获取价值?

 func loadImageName(url: URL) -> Single<String> {
    let data = try? Data(contentsOf: url)
    guard let query = data else {
        return .error(Error.notFound)
    }

        ...

    return Single.deferred {
        Alamofire.request(request).responseJSON {
            if let error = [=12=].error {
                return Single<String>.error(error)
            }

            return Single<String>.just(result)
        }
    }
}

在这种情况下,您需要 Single.create

这需要一个块,它有一个参数。此参数是一个函数,您可以调用它来传递 SingleEvent,即 .success(Element)(在您的情况下 ElementString)或 .error .

块必须return一个Disposable。您可以构造一个 Disposable ,它会在处理后做额外的工作。在网络请求的上下文中,取消请求是有意义的。

func loadImageName(url: URL) -> Single<String> {
    let data = try? Data(contentsOf: url)
    guard let query = data else {
        return .error(Error.notFound)
    }

    // ...

    Single.create { single in
        let request = Alamofire.request(request).responseJSON {
            if let error = [=10=].error {
                return single(.error(error))
            }

            return single(.success(result))
        }

        return Disposables.create { request.cancel() }
    }
}