【问题标题】:Combine perform nested requests组合执行嵌套请求
【发布时间】:2021-09-13 14:25:30
【问题描述】:

我是Combine的新手,请帮忙。我需要结合 2 个 URL 请求来接收完整的数据。第一个带有 id,第二个请求应该在他们的请求中使用这些 id。我需要它在一个出版商。 所以我先表演:

func getDataFromServer(request: Request) -> AnyPublisher<MyData, NetworkError> {
    return networking.xml(request)
        .mapError { NetworkError.invalidData) }
        .flatMap { response -> AnyPublisher< MyData, NetworkError> in
            return Future< MyData, NetworkError>.init { promise in
                guard let data = MyData.from(response: response) else {
                    return promise(.failure(NetworkError.parseError))
                }
                if data.myID.count > 0 {
                    **// Perform second request with data.myID as parameter
                    // receive and fill additional fields data in 'data' object**
                }
                promise(.success(MyData))
            }.eraseToAnyPublisher()
        }
        .eraseToAnyPublisher()
}

【问题讨论】:

    标签: ios swift networking combine


    【解决方案1】:

    删除 Future 只需发出返回 AnyPublisher&lt; MyData, NetworkError&gt; 的其他请求或根据您的响应类型更改该类型

    func getDataFromServer(request: Request) -> AnyPublisher<MyData, NetworkError> {
        return networking.xml(request)
            .mapError { NetworkError.invalidData) }
            .flatMap { response -> AnyPublisher< MyData, NetworkError> in
                guard let data = MyData.from(response: response) else {
                    return Fail(error: NetworkError.parseError).eraseToAnyPublisher()
                }
                
                if data.myID.count > 0 {
                    // Perform second request with data.myID as parameter
                    // receive and fill additional fields data in 'data' object
                    return networking.makeYourRequest(with id: data.myID) // makeYourRequest method shoul return publisher with same type or possible to conver or change flatMap return type
                } else {
                    return Just(data).eraseToAnyPublisher()
                }
    
            }
            .eraseToAnyPublisher()
    }
    

    【讨论】:

      猜你喜欢
      • 2021-01-01
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多