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

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

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

Single.onErrorReturn介绍

[英]Instructs a Single to emit an item (returned by a specified function) rather than invoking SingleObserver#onError if it encounters an error.

By default, when a Single encounters an error that prevents it from emitting the expected item to its subscriber, the Single invokes its subscriber's SingleObserver#onError method, and then quits without invoking any more of its subscriber's methods. The onErrorReturn method changes this behavior. If you pass a function ( resumeFunction) to a Single's onErrorReturn method, if the original Single encounters an error, instead of invoking its subscriber's SingleObserver#onError method, it will instead emit the return value of resumeFunction.

You can use this to prevent errors from propagating or to supply fallback data should errors be encountered. Scheduler: onErrorReturn does not operate by default on a particular Scheduler.
[中]指示单个函数发出一个项(由指定函数返回),而不是在遇到错误时调用SingleObserver#onError。
默认情况下,当单个用户遇到阻止其向订阅者发送预期项目的错误时,该用户将调用订阅者的SingleObserver#OneError方法,然后退出,不再调用订阅者的任何方法。OneRorReturn方法会更改此行为。如果将函数(resumeFunction)传递给Single的onErrorReturn方法,如果原始Single遇到错误,它将不会调用订阅者的SingleObserver#onError方法,而是发出resumeFunction的返回值。
您可以使用它来防止错误传播,或者在遇到错误时提供回退数据。Scheduler:onErrorReturn默认情况下不会在特定的计划程序上运行。

代码示例

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

@Test(expected = NullPointerException.class)
public void onErrorReturnSupplierNull() {
  just1.onErrorReturn((Function<Throwable, Integer>)null);
}

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

@Test(expected = NullPointerException.class)
public void onErrorReturnsSupplierReturnsNull() {
  error.onErrorReturn(new Function<Throwable, Integer>() {
    @Override
    public Integer apply(Throwable t) throws Exception {
      return null;
    }
  }).blockingGet();
}

代码示例来源:origin: TeamNewPipe/NewPipe

private Single<ManagedMediaSource> getLoadedMediaSource(@NonNull final PlayQueueItem stream) {
  return stream.getStream().map(streamInfo -> {
    final MediaSource source = playbackListener.sourceOf(stream, streamInfo);
    if (source == null) {
      final String message = "Unable to resolve source from stream info." +
          " URL: " + stream.getUrl() +
          ", audio count: " + streamInfo.getAudioStreams().size() +
          ", video count: " + streamInfo.getVideoOnlyStreams().size() +
          streamInfo.getVideoStreams().size();
      return new FailedMediaSource(stream, new MediaSourceResolutionException(message));
    }
    final long expiration = System.currentTimeMillis() +
        ServiceHelper.getCacheExpirationMillis(streamInfo.getServiceId());
    return new LoadedMediaSource(source, stream, expiration);
  }).onErrorReturn(throwable -> new FailedMediaSource(stream,
      new StreamInfoLoadException(throwable)));
}

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

@Test
public void resumeThrows() {
  TestObserver<Integer> to = Single.<Integer>error(new TestException("Outer"))
  .onErrorReturn(new Function<Throwable, Integer>() {
    @Override
    public Integer apply(Throwable e) throws Exception {
      throw new TestException("Inner");
    }
  })
  .test()
  .assertFailure(CompositeException.class);
  List<Throwable> errors = TestHelper.compositeList(to.errors().get(0));
  TestHelper.assertError(errors, 0, TestException.class, "Outer");
  TestHelper.assertError(errors, 1, TestException.class, "Inner");
}

代码示例来源:origin: net.redpipe/redpipe-engine

@POST
@Path("/loginAuth")
public Single<Response> loginAuth(@FormParam("username") String username, @FormParam("password") String password,
    @FormParam("return_url") String returnUrl, @Context Session session, @Context RoutingContext ctx,
    @Context AuthProvider auth) throws URISyntaxException {
  if (username == null || username.isEmpty() || password == null || password.isEmpty())
    return Single.just(Response.status(Status.BAD_REQUEST).build());
  JsonObject authInfo = new JsonObject().put("username", username).put("password", password);
  return auth.rxAuthenticate(authInfo).map(user -> {
    ctx.setUser(user);
    if (session != null) {
      // the user has upgraded from unauthenticated to authenticated
      // session should be upgraded as recommended by owasp
      session.regenerateId();
    }
    String redirectUrl = session.remove(REDIRECT_KEY);
    if (redirectUrl == null)
      redirectUrl = returnUrl;
    if (redirectUrl == null)
      redirectUrl = "/";
    try {
      return Response.status(Status.FOUND).location(new URI(redirectUrl)).build();
    } catch (URISyntaxException e) {
      throw new RuntimeException(e);
    }
  }).onErrorReturn(t -> {
    return Response.status(Status.FORBIDDEN).entity(t.getMessage()).type(MediaType.TEXT_PLAIN).build();
  });
}

代码示例来源:origin: FroMage/redpipe

@POST
@Path("/loginAuth")
public Single<Response> loginAuth(@FormParam("username") String username, @FormParam("password") String password,
    @FormParam("return_url") String returnUrl, @Context Session session, @Context RoutingContext ctx,
    @Context AuthProvider auth) throws URISyntaxException {
  if (username == null || username.isEmpty() || password == null || password.isEmpty())
    return Single.just(Response.status(Status.BAD_REQUEST).build());
  JsonObject authInfo = new JsonObject().put("username", username).put("password", password);
  return auth.rxAuthenticate(authInfo).map(user -> {
    ctx.setUser(user);
    if (session != null) {
      // the user has upgraded from unauthenticated to authenticated
      // session should be upgraded as recommended by owasp
      session.regenerateId();
    }
    String redirectUrl = session.remove(REDIRECT_KEY);
    if (redirectUrl == null)
      redirectUrl = returnUrl;
    if (redirectUrl == null)
      redirectUrl = "/";
    try {
      return Response.status(Status.FOUND).location(new URI(redirectUrl)).build();
    } catch (URISyntaxException e) {
      throw new RuntimeException(e);
    }
  }).onErrorReturn(t -> {
    return Response.status(Status.FORBIDDEN).entity(t.getMessage()).type(MediaType.TEXT_PLAIN).build();
  });
}

代码示例来源:origin: FroMage/redpipe

public Single<Response> render(Request request) {
  return selectVariant(request)
      .flatMap(template -> {
        TemplateRenderer renderer = AppGlobals.get().getTemplateRenderer(template);
        if(renderer == null)
          throw new RuntimeException("Failed to find template renderer for template "+template);
        return renderer.render(template, variables);
      }).onErrorReturn(t -> {
        if(t instanceof WebApplicationException)
          return ((WebApplicationException) t).getResponse();
        return RedpipeUtil.rethrow(t);
      });
}

代码示例来源:origin: net.redpipe/redpipe-engine

public Single<Response> render(Request request) {
  return selectVariant(request)
      .flatMap(template -> {
        TemplateRenderer renderer = AppGlobals.get().getTemplateRenderer(template);
        if(renderer == null)
          throw new RuntimeException("Failed to find template renderer for template "+template);
        return renderer.render(template, variables);
      }).onErrorReturn(t -> {
        if(t instanceof WebApplicationException)
          return ((WebApplicationException) t).getResponse();
        return RedpipeUtil.rethrow(t);
      });
}

代码示例来源:origin: d4rken/RxShell

/**
   * Convenience method for {@link #submit(RxCmdShell)} using {@link Single#blockingGet()}
   * <br>If a shell can't be opened {@link ExitCode#EXCEPTION} will be returned and an error message.
   */
  public Result execute(RxCmdShell shell) {
    return submit(shell)
        .onErrorReturn(err -> {
          final Cmd cmd = Builder.this.build();
          List<String> oBuffer = cmd.useOutputBuffer ? new ArrayList<>() : null;
          List<String> eBuffer = cmd.useErrorBuffer ? Collections.singletonList(err.toString()) : null;
          if (cmd.outputProcessor != null) {
            cmd.outputProcessor.onComplete();
          }
          if (cmd.errorProcessor != null) {
            cmd.errorProcessor.onNext(err.toString());
            cmd.errorProcessor.onComplete();
          }
          return new Result(cmd, ExitCode.EXCEPTION, oBuffer, eBuffer);
        })
        .blockingGet();
  }
}

代码示例来源:origin: io.knotx/knotx-databridge-core

@Override
protected Single<KnotContext> processRequest(KnotContext knotContext) {
 return Optional.ofNullable(knotContext.getFragments())
   .map(fragments ->
     Observable.fromIterable(fragments)
       .filter(this::shouldProcess)
       .doOnNext(this::traceFragment)
       .map(FragmentContext::from)
       .flatMapSingle(
         fragmentContext -> snippetProcessor.processSnippet(fragmentContext, knotContext))
       .toList()
   ).orElse(Single.just(Collections.emptyList()))
   .map(result -> createSuccessResponse(knotContext))
   .onErrorReturn(error -> processError(knotContext, error));
}

代码示例来源:origin: Cognifide/knotx

@Override
protected Single<KnotContext> processRequest(KnotContext knotContext) {
 return Optional.ofNullable(knotContext.getFragments())
   .map(fragments ->
     Observable.fromIterable(fragments)
     .filter(this::shouldProcess)
     .doOnNext(this::traceFragment)
     .map(FragmentContext::from)
     .flatMapSingle(
       fragmentContext -> snippetProcessor.processSnippet(fragmentContext, knotContext))
     .toList()
   ).orElse(Single.just(Collections.emptyList()))
   .map(result -> createSuccessResponse(knotContext))
   .onErrorReturn(error -> processError(knotContext, error));
}

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

Single<Boolean> isLogged() {
 return cacheProvider.read()
   .map(user -> true)
   .onErrorReturn(observer -> false);
}

代码示例来源:origin: Cognifide/knotx

public Single<FragmentContext> processSnippet(final FragmentContext fragmentContext,
                       KnotContext request) {
 if (LOGGER.isTraceEnabled()) {
  LOGGER.trace("Processing Handlebars snippet {}", fragmentContext.fragment());
 }
 return Observable.just(fragmentContext)
   .flatMap(FragmentContext::services)
   .map(serviceEngine::mergeWithConfiguration)
   .doOnNext(this::traceService)
   .flatMap(serviceEntry ->
     fetchServiceData(serviceEntry, request).toObservable()
       .map(serviceEntry::getResultWithNamespaceAsKey))
   .reduce(new JsonObject(), JsonObject::mergeIn)
   .map(results -> applyData(fragmentContext, results))
   .onErrorReturn(t -> handleError(fragmentContext, request, t));
}

代码示例来源:origin: io.knotx/knotx-databridge-core

public Single<FragmentContext> processSnippet(final FragmentContext fragmentContext,
                       KnotContext request) {
 if (LOGGER.isTraceEnabled()) {
  LOGGER.trace("Processing Handlebars snippet {}", fragmentContext.fragment());
 }
 return Observable.just(fragmentContext)
   .flatMap(FragmentContext::services)
   .map(serviceEngine::mergeWithConfiguration)
   .doOnNext(this::traceService)
   .flatMap(serviceEntry ->
     fetchServiceData(serviceEntry, request).toObservable()
       .map(serviceEntry::getResultWithNamespaceAsKey)
       .doOnError(e -> storeErrorInFragment(fragmentContext.fragment(), e, serviceEntry.getName()))
   )
   .reduce(new JsonObject(), JsonObject::mergeIn)
   .map(results -> applyData(fragmentContext, results))
   .onErrorReturn(e -> handleError(fragmentContext, request, e));
}

代码示例来源:origin: com.github.rahulsom/grooves-api

.toList()
.map(Flowable::just)
.onErrorReturn(throwable -> executor
    .applyReverts(
        fallbackSnapshotAndEvents.get()

代码示例来源:origin: uk.os.vt/vt-mbtiles

private static Single<Metadata> generateDefault(Database dataSource) {
 return queryMetadata(dataSource).map(new Function<HashMap<String, String>, Metadata>() {
  @Override
  public Metadata apply(HashMap<String, String> metadata) throws Exception {
   final JSONObject tileJson = new JSONObject();
   if (metadata.containsKey("json")) {
    try {
     final JSONObject json = new JSONObject(metadata.get("json"));
     tileJson.put("vector_layers", json.getJSONArray("vector_layers"));
    } catch (final JSONException ex) {
     LOG.error("problem generating JSON for metadata", ex);
    }
   }
   try {
    addMetadataToTileJson(metadata, tileJson);
   } catch (final JSONException ex) {
    LOG.error("problem generating metadata", ex);
   }
   final Metadata.Builder builder = new Metadata.Builder();
   builder.setTileJson(tileJson);
   return builder.build();
  }
 }).onErrorReturn(new Function<Throwable, Metadata>() {
  @Override
  public Metadata apply(Throwable throwable) throws Exception {
   // TODO REMOVE THIS SHOCKING HACK!
   return new Metadata.Builder().build();
  }
 });
}

代码示例来源:origin: info.xiancloud/xian-daocore

.flatMap(sqlExecutionResult -> Single.just(UnitResponse.createSuccess(sqlExecutionResult)))
.doOnSuccess(unitResponse -> after(before))
.onErrorReturn(error -> {
  LOG.error(error);
  return getSqlDriver().handleException(error, this);

代码示例来源:origin: xiancloud/xian

.flatMap(sqlExecutionResult -> Single.just(UnitResponse.createSuccess(sqlExecutionResult)))
.doOnSuccess(unitResponse -> after(before))
.onErrorReturn(error -> {
  LOG.error(error);
  return getSqlDriver().handleException(error, this);

代码示例来源:origin: Cognifide/knotx

@Override
public Single<KnotContext> processRequest(final KnotContext knotContext) {
 return Single.just(knotContext)
   .map(context -> FormsFactory.create(context, options))
   .flatMap(forms -> {
    if (knotContext.getClientRequest().getMethod() == HttpMethod.GET) {
     return Single.just(handleGetMethod(forms, knotContext));
    } else {
     FormEntity current = currentForm(forms, knotContext);
     return callActionAdapter(knotContext, current)
       .map(response -> processAdapterResponse(knotContext, forms, current, response));
    }
   })
   .onErrorReturn(error -> processError(knotContext, error));
}

相关文章

微信公众号

最新文章

更多