在得到答案之前,我不能再次调用我的方法吗?

时间:2018-03-25 08:51:59

标签: ios swift pagination request rx-swift

我在控制台中有这条消息,因为Api方法被多次调用。

curl -X GET 
"https://newsapi.org/v2/top-headlines?apiKey=.............&pageSize=20&category=science&page=2" -i -v
Canceled (33ms)
2018-03-25 12:47:38.810618+0300 TestNewsApp[19773:2413537] Task <4B122FB1-1F0D-41FF-A102-BE2DE95BCBFC>.<42> finished with error - code: -999
2018-03-25 12:47:38.810779+0300 TestNewsApp[19773:2414036] Task <4B122FB1-1F0D-41FF-A102-BE2DE95BCBFC>.<42> HTTP load failed (error code: -999 [1:89])
curl -X GET 
"https://newsapi.org/v2/top-headlines?apiKey=.............&pageSize=20&category=science&page=2" -i -v
Canceled (34ms)
2018-03-25 12:47:38.844640+0300 TestNewsApp[19773:2413537] Task <9D6193D7-B757-4CB3-B812-452FE0B382BF>.<43> finished with error - code: -999
2018-03-25 12:47:38.844870+0300 TestNewsApp[19773:2413546] Task <9D6193D7-B757-4CB3-B812-452FE0B382BF>.<43> HTTP load failed (error code: -999 [1:89])
curl -X GET 
"https://newsapi.org/v2/top-headlines?apiKey=.............&pageSize=20&category=science&page=2" -i -v
Canceled (49ms)
2018-03-25 12:47:38.893744+0300 TestNewsApp[19773:2413579] Task <8A61A548-7F58-43CE-A829-57C8A6F952E5>.<44> finished with error - code: -999
2018-03-25 12:47:38.893937+0300 TestNewsApp[19773:2413546] Task <8A61A548-7F58-43CE-A829-57C8A6F952E5>.<44> HTTP load failed (error code: -999 [1:89])
curl -X GET 
"https://newsapi.org/v2/top-headlines?apiKey=.............&pageSize=20&category=science&page=2" -i -v
Success (1220ms): Status 200

问题在于此代码。

    scrollViewDidReachBottom
        .asObservable()
        .withLatestFrom(loadedPage.asObservable())
        .observeOn(MainScheduler.asyncInstance)
        .flatMapLatest { page in
            return NewsAPI.fetchNews(page: page + 1)
        }.subscribe( onNext: { [weak self]result in
            guard let strongSelf = self else { return }
            strongSelf.loadedPage.value = strongSelf.loadedPage.value + 1
            strongSelf.news.value = strongSelf.news.value + result
        })
        .disposed(by: disposeBag)

fetchNews(页面:Int) - &gt;可观察到的百分比抑制率数据新闻] GT;是静态功能

我使用此代码修复它,但我不确定这是正确的方法。

    scrollViewDidReachBottom
        .asObservable()
        .observeOn(MainScheduler.asyncInstance)
        .subscribe(onNext: { [weak self] _ in
            guard let strongSelf = self else { return }
            if !strongSelf.inCall {
                strongSelf.inCall = true
                NewsAPI.fetchNews(page: strongSelf.loadedPage.value + 1)
                    .observeOn(MainScheduler.asyncInstance)
                    .subscribe(onNext: { [weak self] news in
                        guard let strongSelf = self else { return }
                        strongSelf.news.value += news
                        strongSelf.loadedPage.value += 1
                        strongSelf.inCall = false
                    })
                    .disposed(by: strongSelf.disposeBag)
            }
        })
        .disposed(by: disposeBag)

2 个答案:

答案 0 :(得分:1)

我用这段代码修复了它。

    scrollViewDidReachBottom
        .asObservable()
        .withLatestFrom(loadedPage.asObservable())
        .observeOn(MainScheduler.asyncInstance)
        .flatMapFirst { page in
            return NewsAPI.fetchNews(page: page + 1)
        }
        .subscribe( onNext: { [weak self]result in
            guard let strongSelf = self else { return }
            strongSelf.loadedPage.value += 1
            strongSelf.news.value = strongSelf.news.value + result
        })
        .disposed(by: disposeBag)

flatMapFirst解决了我的问题。

答案 1 :(得分:0)

您有错误:

  

完成错误 - 代码:-999

根据此answer,可能是因为您遇到网络管理员问题。