Установить ограничение таймера scala.rx
Вот пример использования Timer из scala.rx:
package tutorial.webapp
import akka.actor.ActorSystem
import rx.core.{Rx, Var}
import rx._
import rx.ops._
import scala.concurrent.Promise
import scala.concurrent.duration._
import scala.scalajs.js.JSApp
import scala.scalajs.js.annotation.JSExport
import scala.concurrent.ExecutionContext.Implicits.global
/**
* Created by IDEA on 29/10/15.
*/
object RxAddtionalOps extends JSApp {
@JSExport
override def main(): Unit = {
timer1
}
def timer1: Unit = {
implicit val scheduler = new DomScheduler
val t = Timer(100 millis)
var count = 0
val o = Obs(t){
count = count + 1
println(count)
}
}
}
Когда ты бежишь runMain tutorial.webapp.RxAddtionalOps
от sbt консоль будет заблокирована на неопределенный срок. Могу ли я установить ограничение по таймеру? Например, чтобы он прекратил излучать события через 2 минуты.
1 ответ
Прежде всего, Scala - это язык для выражения общих шаблонов программирования в сжатой, элегантной и безопасной для типов форме. Так что держите свою работу в порядке! Следовательно
import akka.actor.ActorSystem
import rx.core.{Rx, Var}
import rx._
import scala.concurrent.Promise
много лишнего шума. И если целью является платформа JavaScript, система Actor еще не доступна, возможно, через пару лет.
Почему ты должен стрелять runMain tutorial.webapp.RxAddtionalOps
в сб, пока простой run
команда будет делать?
Я использовал метод Timer.kill(), чтобы прервать выполнение через ограниченное время:
package tutorial.webapp
import rx.Obs
import rx.ops.{DomScheduler, Timer}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
import scala.language.postfixOps
import scala.scalajs.js.JSApp
object RxAddtionalOps extends JSApp {
val executionStart = scala.compat.Platform.currentTime
def main(): Unit = {
timer1()
}
def timer1() = {
implicit val scheduler = new DomScheduler
val t = Timer(100 millis)
var count = 0
Obs(t) {
count += 1
println(count)
if (count >= 19) {
t.kill()
println(s"Successfully completed without errors. [within ${
scala.compat.Platform.currentTime - executionStart
} ms]")
}
}
}
}
Так как это фактически безголовая фантомная или носороговая среда (в зависимости от вашей конфигурации build.sbt), не может быть обработано прерывание, инициированное пользователем.
Для полноты здесь файл build.sbt:
name := "RxAddtionalOps"
version := "1.0"
scalaVersion := "2.11.7"
enablePlugins(ScalaJSPlugin)
scalacOptions ++= Seq("-unchecked", "-deprecation","-feature")
libraryDependencies ++= Seq(
"com.lihaoyi" %%% "scalarx" % "0.2.8",
"org.scala-js" %% "scalajs-library" % "0.6.5"
)