您好,登錄后才能下訂單哦!
今天看到了flatMap的變體flatMapM
flatMapM {
_.map(getUserWithKey).getOrElse(Future.failed(UnavailableUserKey))……
點進去后看發現:
/**
* Like flatMap but allows the flatMap function to execute asynchronously.
*
* @param f the async function to produce a new body parser from the result of this body parser
* @param ec The context to execute the supplied function with.
* The context is prepared on the calling thread.
* @return the transformed body parser
* @see [[flatMap]]
* @see [[play.api.libs.iteratee.Iteratee#flatMapM]]
*/
def flatMapM[B](f: A => Future[BodyParser[B]])(implicit ec: ExecutionContext): BodyParser[B] = {
// prepare execution context as body parser object may cross thread boundary
implicit val pec = ec.prepare()
new BodyParser[B] {
def apply(request: RequestHeader) = self(request).flatMapM {
case Right(a) =>
f(a).map { _.apply(request) }(pec)
case left =>
Future.successful {
Done[Array[Byte], Either[Result, B]](left.asInstanceOf[Either[Result, B]])
}
}(pec)
override def toString = self.toString
}
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。