我有这样的代码:
compositeDisposable.add(RetrofitClient
.getApi()
.getData()
.flatMap(response -> {
Data data;
if (response.isSuccessful()) {
data = response.body();
//insert data to database
如果有弹性,我正试图模拟数据库崩溃。
public void createParticipationCheckWorkflowsForThis(Integer numberOfAdvices) {
participationAdviceSource.getParticipationAdvicesByAMaximumLimitOf(numberOfAdvices) // i want to retry this
.subscribe(participationAdviceSender::sendAdviceToWorkflowEngine);
}
我的测试场景指定
我试图为以下使用retryWhen运算符的函数编写测试:
// some API I'm using and mocking out in test
import { geoApi } from "api/observable";
export default function retryEpic(actions$) {
return actions$.pipe(
filter(action => action === 'A'),
switchMap(action => {
return of(action)
我觉得我遗漏了一些非常简单的东西。我试图为fetch创建一个简单的重试,但只执行retryWhen中的代码。我使用的是React,所以我没有this.http.get的便利。也许这是from(/*promise*/)的一个问题?我试图将重试逻辑建立在this post之上。 这是我期望看到的: Getting data from fetch...
In the retryWhen
In the interval
/* repeat the previous 3 lines 3x times including the Fetch */
Giving up 相反,我得到的是: Getting
步骤:
I有一个源流(可观察到),它是一个web连接。当连接断开或错误时,源从源stream.Downstream上发出一个错误,我使用retryWhen在每x秒之后尝试重新连接到套接字连接。
- Up to this point everything works as I want.
在下游有一个设置默认值的catchError。这允许应用程序了解连接的最新状态.。
示例代码(我的代码的一个非常简单的示例):
connect(): Observable<any> {
return this.websocket() // source stream that errors
我有一个像这样组织的Single流:
getSomething() // returns Single<>
.flatMap(something -> {
// various things
return Single.defer( () -> {
// various other things
return Single.<SomeType>create(emitter -> {
// some more stuff
someCallbackApi(result -> {