io.reactivex.Single.onErrorResumeNext()方法的使用及代码示例

x33g5p2x  于2022-01-29 转载在 其他  
字(9.0k)|赞(0)|评价(0)|浏览(143)

本文整理了Java中io.reactivex.Single.onErrorResumeNext()方法的一些代码示例,展示了Single.onErrorResumeNext()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Single.onErrorResumeNext()方法的具体详情如下:
包路径:io.reactivex.Single
类名称:Single
方法名:onErrorResumeNext

Single.onErrorResumeNext介绍

[英]Instructs a Single to pass control to another Single rather than invoking SingleObserver#onError(Throwable) if it encounters an error.

By default, when a Single encounters an error that prevents it from emitting the expected item to its SingleObserver, the Single invokes its SingleObserver's onError method, and then quits without invoking any more of its SingleObserver's methods. The onErrorResumeNext method changes this behavior. If you pass another Single ( resumeSingleInCaseOfError) to a Single's onErrorResumeNext method, if the original Single encounters an error, instead of invoking its SingleObserver's onError method, it will instead relinquish control to resumeSingleInCaseOfError which will invoke the SingleObserver's SingleObserver#onSuccess method if it is able to do so. In such a case, because no Single necessarily invokes onError, the SingleObserver may never know that an error happened.

You can use this to prevent errors from propagating or to supply fallback data should errors be encountered. Scheduler: onErrorResumeNext does not operate by default on a particular Scheduler.
[中]指示一个单体将控制传递给另一个单体,而不是在遇到错误时调用SingleObserver#onError(Throwable)。
默认情况下,当单个用户遇到错误,无法向其SingleObserver发送预期项时,该用户将调用其SingleObserver的OneError方法,然后退出,而不再调用其SingleObserver的任何方法。下一个方法会更改此行为。如果将另一个单曲(ResumeSingCaseofError)传递给单曲的onErrorResumeNext方法,如果原始单曲遇到错误,而不是调用其SingleObserver的onError方法,相反,它将放弃对resumeSingleInCaseOfError的控制,如果可以的话,它将调用SingleObserver的SingleObserver#onSuccess方法。在这种情况下,因为没有任何一个单一的操作必须调用OneError,所以单一的观察者可能永远不会知道发生了错误。
您可以使用它来防止错误传播,或者在遇到错误时提供回退数据。调度器:OneRorResumeNext默认情况下不会在特定的调度器上运行。

代码示例

代码示例来源:origin: ReactiveX/RxJava

@Override
  public SingleSource<Object> apply(Single<Object> s) throws Exception {
    return s.onErrorResumeNext(Single.just(1));
  }
});

代码示例来源:origin: ReactiveX/RxJava

@Test(expected = NullPointerException.class)
public void onErrorResumeNextFunctionNull() {
  error.onErrorResumeNext((Function<Throwable, Single<Integer>>)null);
}

代码示例来源:origin: ReactiveX/RxJava

@Test(expected = NullPointerException.class)
public void onErrorResumeNextSingleNull() {
  error.onErrorResumeNext((Single<Integer>)null);
}

代码示例来源:origin: ReactiveX/RxJava

@Test
public void testOnErrorCalledOnScheduler() throws Exception {
  final CountDownLatch latch = new CountDownLatch(1);
  final AtomicReference<Thread> thread = new AtomicReference<Thread>();
  Single.<String>error(new Exception())
      .delay(0, TimeUnit.MILLISECONDS, Schedulers.newThread())
      .doOnError(new Consumer<Throwable>() {
        @Override
        public void accept(Throwable throwable) throws Exception {
          thread.set(Thread.currentThread());
          latch.countDown();
        }
      })
      .onErrorResumeNext(Single.just(""))
      .subscribe();
  latch.await();
  assertNotEquals(Thread.currentThread(), thread.get());
}

代码示例来源:origin: ReactiveX/RxJava

public final Single<T> onErrorResumeNext(final Single<? extends T> resumeSingleInCaseOfError) {
  ObjectHelper.requireNonNull(resumeSingleInCaseOfError, "resumeSingleInCaseOfError is null");
  return onErrorResumeNext(Functions.justFunction(resumeSingleInCaseOfError));

代码示例来源:origin: ReactiveX/RxJava

@Test
public void onErrorResumeNextFunctionReturnsNull() {
  try {
    error.onErrorResumeNext(new Function<Throwable, Single<Integer>>() {
      @Override
      public Single<Integer> apply(Throwable e) {
        return null;
      }
    }).blockingGet();
  } catch (CompositeException ex) {
    assertTrue(ex.toString(), ex.getExceptions().get(1) instanceof NullPointerException);
  }
}

代码示例来源:origin: redisson/redisson

public final Single<T> onErrorResumeNext(final Single<? extends T> resumeSingleInCaseOfError) {
  ObjectHelper.requireNonNull(resumeSingleInCaseOfError, "resumeSingleInCaseOfError is null");
  return onErrorResumeNext(Functions.justFunction(resumeSingleInCaseOfError));

代码示例来源:origin: ReactiveX/RxJava

@Test
  public void resumeSuccess() {
    Single.just(1)
    .onErrorResumeNext(Single.just(2))
    .test()
    .assertResult(1);
  }
}

代码示例来源:origin: ReactiveX/RxJava

@Test
public void resumeDispose() {
  TestHelper.checkDisposed(Single.error(new TestException("Main"))
  .onErrorResumeNext(Single.just(1)));
}

代码示例来源:origin: ReactiveX/RxJava

@Test
public void onErrorResumeNext() {
  Single.<Integer>error(new TestException())
  .onErrorResumeNext(Single.just(1))
  .test()
  .assertResult(1);
}

代码示例来源:origin: ReactiveX/RxJava

@Test
public void resumeErrors() {
  Single.error(new TestException("Main"))
  .onErrorResumeNext(Single.error(new TestException("Resume")))
  .test()
  .assertFailureAndMessage(TestException.class, "Resume");
}

代码示例来源:origin: chat-sdk/chat-sdk-android

public static Single<Bitmap> combineBitmaps (final Context context, final List<String> urls) {
  return Single.create(e -> {
    final ArrayList<Bitmap> bitmaps = new ArrayList<>();
    ArrayList<Single<Bitmap>> singles = new ArrayList<>();
    for(String url : urls) {
      if(singles.size() >= 4) {
        break;
      }
      singles.add(bitmapForURL(context, url).onErrorResumeNext(throwable -> null));
    }
    Single.merge(singles).observeOn(AndroidSchedulers.mainThread())
        .doOnComplete(() -> {
          int size = context.getResources().getDimensionPixelSize(R.dimen.chat_sdk_chat_action_barcircle_image_view_size);
          Bitmap bitmap = ImageUtils.getMixImagesBitmap(size, size, bitmaps);
          if(bitmap == null) {
            e.onError(new Throwable(context.getString(R.string.thread_image_could_not_be_created)));
          }
          else {
            e.onSuccess(bitmap);
          }
        })
        .subscribe(bitmaps::add, throwable -> {
          e.onError(throwable);
          ChatSDK.logError(throwable);
        });
  });
}

代码示例来源:origin: gravitee-io/graviteeio-access-management

@Override
public Single<Page<User>> findByDomain(String domain, int page, int size) {
  LOGGER.debug("Find users by domain: {}", domain);
  return userRepository.findByDomain(domain, page, size)
      .onErrorResumeNext(ex -> {
        LOGGER.error("An error occurs while trying to find users by domain {}", domain, ex);
        return Single.error(new TechnicalManagementException(String.format("An error occurs while trying to find users by domain %s", domain), ex));
      });
}

代码示例来源:origin: gravitee-io/graviteeio-access-management

@Override
public Single<List<Group>> findByMember(String memberId) {
  LOGGER.debug("Find groups by member : {}", memberId);
  return groupRepository.findByMember(memberId)
      .map(groups -> groups.stream().map(group -> convert(group, null, true)).collect(Collectors.toList()))
      .onErrorResumeNext(ex -> {
        LOGGER.error("An error occurs while trying to find a groups using member ", memberId, ex);
        return Single.error(new TechnicalManagementException(
            String.format("An error occurs while trying to find a user using member: %s", memberId), ex));
      });
}

代码示例来源:origin: gravitee-io/graviteeio-access-management

@Override
public Single<Page<Client>> findAll(int page, int size) {
  LOGGER.debug("Find clients");
  return clientRepository.findAll(page, size)
      .onErrorResumeNext(ex -> {
        LOGGER.error("An error occurs while trying to find clients", ex);
        return Single.error(new TechnicalManagementException("An error occurs while trying to find clients", ex));
      });
}

代码示例来源:origin: gravitee-io/graviteeio-access-management

@Override
public Single<Set<Domain>> findByIdIn(Collection<String> ids) {
  LOGGER.debug("Find domains by id in {}", ids);
  return domainRepository.findByIdIn(ids)
      .onErrorResumeNext(ex -> {
        LOGGER.error("An error occurs while trying to find domains by id in {}", ids, ex);
        return Single.error(new TechnicalManagementException("An error occurs while trying to find domains by id in", ex));
      });
}

代码示例来源:origin: com.microsoft.azure/azure-storage-blob

static <T> Single<T> addErrorWrappingToSingle(Single<T> s) {
    return s.onErrorResumeNext(e -> {
      if (e instanceof StorageErrorException) {
        return Single.error(new StorageException((StorageErrorException) e));
      }
      return Single.error(e);
    });
  }
}

代码示例来源:origin: VictorAlbertos/ReactiveCache

/**
 * Read from cache and throw if no data is available.
 */
public final Single<T> read() {
 return Single.defer(() ->
   Single.fromObservable(builder.processorProviders
     .<T>process(getConfigProvider(exceptionAdapter.placeholderLoader(),
       new EvictDynamicKey(false), false, null))))
   .onErrorResumeNext(exceptionAdapter::stripPlaceholderLoaderException);
}

代码示例来源:origin: io.gravitee.am.gateway.handlers/gravitee-am-gateway-handler

@Override
public Maybe<Token> getRefreshToken(String refreshToken, Client client) {
  return jwtService.decodeAndVerify(refreshToken, client)
      .onErrorResumeNext(ex -> {
        if (ex instanceof JwtException) {
          return Single.error(new InvalidTokenException(ex.getMessage(), ex));
        }
        return Single.error(ex);
      })
      .flatMapMaybe(jwt -> refreshTokenRepository.findByToken(jwt.getJti()).map(refreshToken1 -> convertRefreshToken(jwt)));
}

代码示例来源:origin: TrustWallet/trust-wallet-android-source

private Single<Wallet> passwordVerification(Wallet wallet, String masterPassword) {
      return passwordStore
        .getPassword(wallet)
        .flatMap(password -> walletRepository
            .exportWallet(wallet, password, password)
            .flatMap(keyStore -> walletRepository.findWallet(wallet.address)))
        .onErrorResumeNext(throwable -> walletRepository
            .deleteWallet(wallet.address, masterPassword)
            .lift(completableErrorProxy(throwable))
            .toSingle(() -> wallet));
  }
}

相关文章

微信公众号

最新文章

更多