vertx.setPeriodic(1000, id -> {
//api call
if (count == 4){
vertx.cancelTime(id);
}
});现在的问题是我不想要一个固定的1000ms时间,我只想调用api 4次,然后用最终的api响应进行进一步的处理,请帮助。
发布于 2020-08-06 16:34:08
一种方法是使用递归方法。
因此,您可以将这样的东西实现为一个方便的入口点
private Future<YourResultType> callApiNTimes(final int repetitions) {
final Promise<YourResultType> p = Promise.promise();
recursiveApiCalls(p, 0, repetitions);
return p.future();
}按如下方式实现递归
private void recursiveApiCalls(final Promise<YourResultType> p, final int counter, final int maxRepetitions) {
yourRawApiCall().onComplete(reply -> {
if (reply.failed()) {
p.fail(reply.cause());
return;
}
if (counter < maxRepetitions) {
recursiveApiCalls(p, counter + 1, maxRepetitions);
return;
}
p.complete(reply.result());
});
}最后,实现yourRawApiCall,然后像这样使用它
callApiNTimes(4).onComplete(reply -> {
if (reply.failed()) {
// Something went wrong, do your error handling..
return;
}
final YourResultType result = reply.result();
// Do something with your result..
});Antoher的方法是将您的API调用作为Futures放在一个列表中,并与CompositeFuture.all、CompositeFuture.join、..而不是一个接一个。
https://stackoverflow.com/questions/63271426
复制相似问题