Ждите метода, который возвращает DeferredResult - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть метод обслуживания, который возвращает DefferedResult<Foo> через несколько секунд, но мне нужно, чтобы мой код дождался завершения этого метода и возвратил отложенный результат с заданным результатом.

Вот пример кода:

@Service
public class FooService {
   // ...
   public DeferredResult<Foo> fetchFoo(long id) throws InterruptedException {
       DeferredResult<Foo> fooDeferredResult = new DeferredResult<>();
       concurrentMap.put(id, fooDeferredResult);
       return fooDeferredResult;
   }

   // this you can figure out as some handler or scheduler which receive messages and is called
   public void anotherMethod(Foo foo) {
       DeferredResult<Foo> remove = concurrentMap.remove(foo.getId());
       remove.setResult(foo);
   }
   // ...
}

и я хочу позвонить в другой сервис:

@Service
public class AnotherService {

    @Autowired
    FooService fooService;

    public Foo bar(long id) {
        // some logic
        Foo foo = fooService.fetchFoo(id).getResult();
        // another logic which depends on received foo
        // there I need wait for result of fetchFoo method

        return foo;
    }

}

Подскажите пожалуйста, как обеспечить такое поведение? Спасибо за совет.

1 Ответ

0 голосов
/ 14 сентября 2018
fooService.fetchFoo(id).setResultHandler(result -> {
    // do something
});
...