Вот пример из Реактивные веб-приложения в Play книге:Понимание Iteratee в рамках игры
package controllers
import play.api._
import play.api.libs.iteratee.Iteratee
import play.api.libs.oauth.{OAuthCalculator, RequestToken, ConsumerKey}
import play.api.Play.current
import play.api.libs.ws.WS
import play.api.mvc._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
class Application extends Controller {
val loggingIteratee = Iteratee.foreach[Array[Byte]] {
array => Logger.info(array.map(_.toChar).mkString)
}
def tweets = Action.async {
val credentials: Option[(ConsumerKey, RequestToken)] = for {
apiKey <- Play.configuration.getString("twitter.apiKey")
apiSecret <- Play.configuration.getString("twitter.apiSecret")
token <- Play.configuration.getString("twitter.token")
tokenSecret <- Play.configuration.getString("twitter.tokenSecret")
} yield (
ConsumerKey(apiKey, apiSecret),
RequestToken(token, tokenSecret)
)
credentials.map {
case (consumerKey, requestToken) => WS.url("https://stream.twitter.com/1.1/statuses/filter.json")
.sign(OAuthCalculator(consumerKey, requestToken))
.withQueryString("track" -> "cat")
.get {
response =>
Logger.info("Status: " + response.status)
loggingIteratee
}
.map(response => Ok("Stream closed"))
} getOrElse {
Future {
InternalServerError("Twitter credentials missing")
}
}
}
def index = Action {
Ok(views.html.index("Your new application is ready."))
}
}
Я с трудом понимая оборванных линии:
loggingIteratee
В этом случае похоже, записывает сообщения о коте из твиттера. Но как это достигается? Мы ничего не передавали.
кажется как 'get' метод нуждается в функции от ответ на «Iteratee», а затем он использует его внутренне. См. Docs: https://www.playframework.com/documentation/2.3.x/api/scala/index.html#play.api.libs.ws.WSRequestHolder 'get [A] (потребитель: (WSResponseHeaders) ⇒ Iteratee [ Array [Byte], A]) ' –
Да, я только что понял, что минуту назад. Благодаря! Не могли бы вы написать ответ? Я буду рад принять! :) – qed