首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置scala.rx计时器的限制

设置scala.rx计时器的限制
EN

Stack Overflow用户
提问于 2015-10-30 18:12:08
回答 1查看 103关注 0票数 0

下面是一个使用scala.rx定时器的例子:

代码语言:javascript
复制
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)
    }
  }
}

当您从sbt运行runMain tutorial.webapp.RxAddtionalOps时,控制台将被无限期阻止。我能给计时器设置一个限制吗?例如,使其在2分钟内停止发出事件。

EN

回答 1

Stack Overflow用户

发布于 2015-11-02 23:21:52

首先,Scala是一种以简洁、优雅和类型安全的方式表达常见编程模式的语言。所以,让你的工作保持整洁!因此

代码语言:javascript
复制
import akka.actor.ActorSystem
import rx.core.{Rx, Var}
import rx._    
import scala.concurrent.Promise

是很多不必要的噪音。如果目标是JavaScript平台,Actor系统还不可用,可能需要几年时间。

为什么要在sbt中启动runMain tutorial.webapp.RxAddtionalOps,而一个简单的run命令就可以了?

我使用Timer.kill()方法在一段有限的时间后终止执行:

代码语言:javascript
复制
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]")
      }
    }
  }
}

因为它实际上是一个无头幻影或rhino环境(取决于您的build.sbt配置),所以不能处理用户发起的中断。

为了完整起见,这里提供了build.sbt文件:

代码语言:javascript
复制
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"
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33433488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档