如何在闭包中 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)
(在您的情况下 Element
是 String
)或 .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() }
}
}
我做错了什么?如何从闭包中获取 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)
(在您的情况下 Element
是 String
)或 .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() }
}
}