有没有办法通过 while 循环内 api 的 Mono.fromCallable() 的 return 值更新局部变量?
Is there a way to update a local variable through Mono.fromCallable()'s return value of an api inside a while loop?
我需要多次运行 GET 请求,直到GET 的return 是一个空数组。
目前我一直在用一个全局的 receivedAllApiData 变量来做这件事,如果它是一个空数组,我会在 getApiValues 中更新它。但是我需要在本地方法中找到一种方法来执行此操作。 mono.fromCallable 有没有办法改变局部变量?
while (!receivedAllApiData && offsetAmount < MAX_REQUEST_FALLBACK) {
int offset = offset;
Mono.fromCallable(() -> Api.getApiValues(Id, offset, LIMIT, property))
.map(this::getApiValues)
.subscribe(this::buildStructure, this::ErrorCounter);
offsetAmount += LIMIT;
}
也许有更好的方法来 运行 多次调用?
使用 atomicBoolean,您可以更新 map 函数内的值,如下所示。
AtomicBoolean receivedAllApiData = new AtomicBoolean(false);
while (!!receivedAllApiData.get() && offsetAmount < MAX_REQUEST_FALLBACK) {
int offset = offsetAmount;
Mono.fromCallable(() -> Api.getApiValues(Id, offset, LIMIT, property))
.map(listOfValues -> {
List<Values> nonNullListOfValues = CollectionUtils.isEmpty(listOfValues) ? emptyList() : listOfValues;
receivedAllApiData.set(nonNullListOfValues.isEmpty());
return nonNullListOfValues;
})
.subscribe(this::buildStructure, this::ErrorCounter);
offsetAmount += LIMIT;
}
我需要多次运行 GET 请求,直到GET 的return 是一个空数组。 目前我一直在用一个全局的 receivedAllApiData 变量来做这件事,如果它是一个空数组,我会在 getApiValues 中更新它。但是我需要在本地方法中找到一种方法来执行此操作。 mono.fromCallable 有没有办法改变局部变量?
while (!receivedAllApiData && offsetAmount < MAX_REQUEST_FALLBACK) {
int offset = offset;
Mono.fromCallable(() -> Api.getApiValues(Id, offset, LIMIT, property))
.map(this::getApiValues)
.subscribe(this::buildStructure, this::ErrorCounter);
offsetAmount += LIMIT;
}
也许有更好的方法来 运行 多次调用?
使用 atomicBoolean,您可以更新 map 函数内的值,如下所示。
AtomicBoolean receivedAllApiData = new AtomicBoolean(false);
while (!!receivedAllApiData.get() && offsetAmount < MAX_REQUEST_FALLBACK) {
int offset = offsetAmount;
Mono.fromCallable(() -> Api.getApiValues(Id, offset, LIMIT, property))
.map(listOfValues -> {
List<Values> nonNullListOfValues = CollectionUtils.isEmpty(listOfValues) ? emptyList() : listOfValues;
receivedAllApiData.set(nonNullListOfValues.isEmpty());
return nonNullListOfValues;
})
.subscribe(this::buildStructure, this::ErrorCounter);
offsetAmount += LIMIT;
}