Scala: функции перехвата для предоставления неявных параметров с Akka Futures
Итак, у меня есть серия вызовов функций, которые возвращают Akka Futures, и я объединяю их в цепочку с помощью flatMap и map следующим образом:
doAsyncCall(..).flatMap { res1 =>
doAsyncCall2(..).flatMap { res2 =>
doAsyncCall3(..).map { res3 =>
res
}
}
}
которые могут быть распределены по различным вызовам функций. Теперь каждый из этих вызовов doAsyncCallX возвращает Future[Result], и я хотел бы иметь возможность составлять эти результаты, передавая их по цепочке, пока, в конце концов, я не верну составленный результат всех результатов в цепочке.
Для этого я подумал о том, чтобы каждый doAsyncCallX получал неявный параметр предыдущего результата и объединял полученный результат с предыдущим. Проблема в том, что я не могу найти способ сделать это, не засоряя использование моей библиотеки неявными значениями вроде этого:
doAsyncCall(..).flatMap { res1 =>
implicit val implicitRes1 = res1
doAsyncCall2(..).flatMap { res2 =>
implicit val implicitRes2 = res2
doAsyncCall3(..).map { res3 =>
res
}
}
}
То, что я хотел бы сделать, это иметь возможность перехватить приложение flatMap, чтобы убедиться, что предыдущий ответ правильно передан как неявный параметр следующего вызова doAsyncCallX. Есть идеи, как этого добиться?
1 ответ
Возможно, я что-то упускаю, но есть ли причина использовать импликации вообще?
for(res1 <- doAsyncCall1(..);
res2 <- doAsyncCall2(res1);
res3 <- doAsyncCall3(res2)) yield(res3)
Если вам нужно вернуть результат, составляющий несколько промежуточных результатов, измените доходность, чтобы получить что-то другое, например, кортеж, например yield((res1,res2,res3))
, Результатом которого будет что-то вроде Future[(Result1,Result2,Result3)]