scala – 使用(B => Future [C])函数的未来[[A,B]]到[未来[A,
发布时间:2020-12-16 18:46:02 所属栏目:安全 来源:网络整理
导读:我有一个未来[A [B,B]]和一个从B提供未来[C]的函数. 我需要将Future [Either [A,B]]转换为Future [Aither [A,C]]. 有没有直接的方法来获得未来[A [C,C]]而不是未来[A,未来[C]]]? 我正在考虑这样的事情: val eventuallyInitialValue: Future[Either[A,B]] =
我有一个未来[A [B,B]]和一个从B提供未来[C]的函数.
我需要将Future [Either [A,B]]转换为Future [Aither [A,C]]. 有没有直接的方法来获得未来[A [C,C]]而不是未来[A,未来[C]]]? 我正在考虑这样的事情: val eventuallyInitialValue: Future[Either[A,B]] = ??? val result: Future[Either[A,C]] = for { e: Either[A,B] <- initialValue c: C <- service.getValue(e.right) } yield e.right.map(_ => c) 它只是伪代码,因为service.getValue(e.right)不能编译.这样做的正确方法是什么? 解决方法
这就是我想出的:
type B = Int type A = String type C = Long val eitherF: Future[Either[A,B]] = ??? def f(b: B): Future[C] = ??? val mapped: Future[Either[A,C]] = eitherF.flatMap { case Left(a) => Future.successful(Left(a)) case Right(b) => f(b).map(Right(_)) } 基本上你可以平面地绘制未来,然后如果它是左边只是返回成功,如果它是一个权利你可以应用未来并映射一个权利. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |