代码之家  ›  专栏  ›  技术社区  ›  Anton Makov

在改装中延迟多个呼叫

  •  0
  • Anton Makov  · 技术社区  · 6 年前

    public void downloadSeason(int seasonNumber)
    {
        Log.d(TAG,"adding a season"+seasonNumber);
        int delay = 500;
        Observable<SeriesSeasonResponse> seasonSpecs = mSeasonService.getSeasonSpecs(seriesEntity.getId(), seasonNumber,
                Consts.DEFAULT_LANGUAGE, Consts.API_KEY_V3);
        seasonSpecs.subscribeOn(Schedulers.io()).observeOn(Schedulers.computation())
                .delay(delay, TimeUnit.MILLISECONDS)
                   .subscribe(new Observer<SeriesSeasonResponse>()
        {
    
            @Override
            public void onComplete()
            {
    
            }
    
            @Override
            public void onSubscribe(Disposable d)
            {
    
            }
    
            @Override
            public void onNext(SeriesSeasonResponse seriesSeasonResponse)
            {
                addSeasonToDataBase(seriesEntity.getName(), seriesSeasonResponse);
    
                Observable.range(1, seriesSeasonResponse.getEpisodes().size())
                        .subscribe(new Observer<Integer>()
                        {
    
                            @Override
                            public void onSubscribe(Disposable d) {
    
                            }
    
                            @Override
                            public void onNext(Integer integer) {
                                Log.d(TAG,"adding season"+seriesSeasonResponse.getSeasonNumber()+" episode"+integer);
                                EpisodeInSeason currentEpisode = seriesSeasonResponse.getEpisodes().get(integer);
                                Observable<EpisodeSpecsResponse> episodeSpecs = mEpisodeSpecsService.getEpisodeSpecs(seriesEntity.getId(), currentEpisode.getSeasonNumber(), currentEpisode.getEpisodeNumber(), Consts.DEFAULT_LANGUAGE, Consts.API_KEY_V3);
                                episodeSpecs
                                    .subscribeOn(Schedulers.io())
                                    .observeOn(Schedulers.computation())
                                    .delay(500, TimeUnit.MILLISECONDS)
                                        .subscribe(new Observer<EpisodeSpecsResponse>() {
                                            @Override
                                            public void onSubscribe(Disposable d) {
    
                                            }
    
                                            @Override
                                            public void onNext(EpisodeSpecsResponse episodeSpecsResponse) {
    
                                                addEpisodeToDataBase(seriesEntity.getId(),episodeSpecsResponse);
                                                Log.d(TAG,String.format("added "+"S%02dE%02d",episodeSpecsResponse.getSeasonNumber(),episodeSpecsResponse.getEpisodeNumber()));
                                            }
    
                                            @Override
                                            public void onError(Throwable e) {
                                                Log.d(TAG, e.getMessage());
                                            }
    
                                            @Override
                                            public void onComplete() {
    
                                            }
                                        });
    
                            }
    
                            @Override
                            public void onError(Throwable e) {
                                Log.e(TAG, "Episode error= "+e.getMessage());
                            }
    
                            @Override
                            public void onComplete() {
    
                            }
                        });
    
            }
    
            @Override
            public void onError(Throwable e)
            {
                Log.e(TAG, "Season error= "+e.getMessage());
            }
        });
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Oliver    6 年前

    延迟函数将给定的延迟添加到每个发射值。 因此,您当前的实现将以尽可能快的速度触发所有请求,并且每个发出的响应将延迟500毫秒。这不是您想要实现的。

    试着在线路后面加上延迟 Observable.range(1, ...) 通过使用这行代码 .concatMap(i-> Observable.just(i).delay(500, TimeUnit.MILLISECONDS))

    http://reactivex.io/documentation/operators/concat.html