每次迭代数组的RxSwift请求

我正在使用Rx Swift获取一些网络数据,而我在执行每次迭代数组的请求时遇到了麻烦.这是我的想法:

>我有一个API端点,它返回一个不包含位置数据的Objs数组.然后我将循环遍历Objs数组,并为每个获取Obj id的位置详细信息.像这样的东西:

(代码简化)

var arrayObj = networkClient.request(getobjsEndpoint)
        .fetchObjLocationDetails(withNetworkClient: networkClient)

>而fetchObjLocationDetails()将类似于:

(代码简化)

extension ObservableType where E == [Obj]? {
func fetchObjsLocationDetails(withNetworkClient networkClient: NetworkClient) -> Observable<[Obj]?> {
        return flatMap { Objs -> Observable<[Obj]?> in
            guard let unwrappedobjs = Objs as [Obj]? else { return Observable.just(nil) }

            let disposeBag = disposeBag()
            var populatedobjs = [Obj]()

            unwrappedobjs.forEach { obj in
                let getLocationDetailsEndpoint = WeDriveParkAPI.getLocation(id: String(obj.id))

                networkClient.request(getLocationDetailsEndpoint)
                    .observeOn(MainScheduler.instance)
                    .subscribe(onNext: { json in
                        guard let populatedobj = Obj.fromJSON(json) as Obj? else { return }

                        populatedobjs += [populatedobj]
                        },onError:{ e in

                    }).adddisposableto(disposeBag)
            }
            return Observable.just(populatedobjs)
        }
    }
}

这个解决方案并没有真正起作用,因为代码甚至没有进入订阅一个闭包.

请记住,我是Swift和RxSwift编程的新手,所以要温柔:)任何帮助将不胜感激.

而不是制作自定义运算符,您可以使用内置.
networkClient.request(getobjsEndpoint)
.map({ (objs:[Obj]?) -> [Obj] in
    if let objs = objs {
        return objs
    } else {
        throw NSError(domain: "Objs is nil",code: 1,userInfo: nil)
    }
})
.flatMap({ (objs:[Obj]) -> Observable<[Obj]> in
    return objs.toObservable().flatMap({ (obj:Obj) -> Observable<Obj> in
        let getLocationDetailsEndpoint = WeDriveParkAPI.getLocation(id: String(obj.id))
        return self.networkClient.request(getLocationDetailsEndpoint)
        .map({ (obj:Obj?) -> Obj in
            if let obj = obj {
                return obj
            } else {
                throw NSError(domain: "Obj is nil",userInfo: nil)
            }
        })
    }).toArray()
})
.subscribeNext({ (objs:[Obj]) in
    print("Populated objects:")
    print(objs)
}).adddisposableto(bag)

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...