我有一个加载页面,我想在其中对不相关的信息执行两个网络请求(rxjava)。在这两个请求完成之前,我不想进入下一页,即使其中一个或两个都失败了。
>
使用zip将请求绑定在一起。有没有办法不必被迫使用双函数,也不必返回null?
请求A和B有一个。doOnNext和。多恩。如果其中一个返回错误,zip observable是否继续?zip订阅服务器是否也会返回错误?
这是最好的方法吗?
private Disposable retrieveBothThings() {
return Observable.zip(getThingA(), getThingB(),
(A, B) -> {
onAllCallsComplete();
return null;
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(o -> {}, Logger::e);
}
private Observable<...> getThingA() {
return SessionManager.getInstance().getApi()
.getA()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(this::onACompleted)
.doOnError(this::onAFailed);
}
private Observable<...> getThingB() {
return SessionManager.getInstance().getApi()
.getB()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).toObservable()
.doOnNext(this::onBSuccess)
.doOnError(this::onBFailure);
}
private void onBSuccess(...) {
...
}
private void onBFailure(final Throwable throwable) {
Logger.e(throwable);
}
private void onACompleted(...) {
...
}
private void onAFailed(final Throwable throwable) {
Logger.e(throwable);
}
可以使用merge()
操作符组合两个观察值。您可以使用onErrorResumeNext()
将错误转换为onComplete()
。
Completable.merge(
observable1
.doOnNext(this::onACompleted)
.doOnError(this::onAFailed)
.onErrorResumeNext( Completable.complete() )
.toCompletable(),
observable2
.doOnNext(this::onBCompleted)
.doOnError(this::onBFailed)
.onErrorResumeNext( Completable.complete() ),
.toCompletable() )
.subscribe( ignore -> {},
error -> {},
() -> { processCompletion(); } );
我正试图通过迁移当前使用Angular1/AngularJS编写的应用程序来提高我对Angular2的了解。 有一个特征特别难倒了我。我试图复制一个功能,其中调用函数等待继续,直到它正在调用的函数完成了一个循环的promise。在AngularJS中,我调用的函数基本上是这样的: 它包含一个调用另一个函数()的循环,该函数还返回一个promise,并将所有返回的promise存储在一个数组中。 使
问题内容: 我正在尝试在Node.js / Express中创建一个路由,该路由从两个查询中读取数据,然后基于来自查询的数据来增加计数。由于Node.js是异步的,因此在读取所有数据之前会显示总计。 我创建了一个简单的示例,以达到我目前正在做的事情 我不确定要等到两个功能都完成后才能打印总计,我该做什么。我是否需要创建一个自定义事件发射器来实现这一目标? 问题答案: 拥抱异步性: 或使用Promi
我有两个JS函数。一个叫另一个。在调用函数中,我想调用另一个函数,等待该函数完成,然后继续。例如,伪代码: 我想出了这个解决方案,但不知道这是否是一个明智的方法。 这合法吗?有没有更优雅的处理方法?也许用jQuery?
我有一个方法,可以为WebView的WebEngine设置一个新的网页,需要等到网页加载完成后才能继续使用当前方法。 基本上我想要: 我尝试过使用ChangeListener(),但它只会在我的方法完成执行后执行。我在谷歌上搜索了许多导致更多挫折感的术语,比如“java非阻塞等待布尔值”。最终,我成功地启动了新线程(以防止应用程序GUI锁定)并使用了倒计时(与Thread.join()相反)。下面
我必须使用axios提出请求,以便获取一些数据,这些数据应该作为道具传递给React组件。下面是我的渲染函数: FateChBoardList是一个异步函数,因此它将返回一个promise。我可以将然后和捕获处理程序附加到返回promise,但在这种情况下,我必须在两个处理程序中放入相同的超文本标记语言代码。还有别的办法吗?