不能在scala.js中使用期货 - Rhino无法加载Scala.js类

时间:2015-04-29 18:10:41

标签: scala scala.js

当我在Scala.js中使用期货时,至少在测试中,它们永远不会被执行,我无法等待它们。

考虑到这个简单的测试:

package example

import utest._
import utest.framework.{Test, TestSuite}
import utest.util.Tree

import scala.concurrent.duration._
import scala.concurrent.{Await, Future}
import scala.language.postfixOps
import scala.scalajs.concurrent.JSExecutionContext.Implicits.queue

object SomeFutureTest extends TestSuite {
  override def tests: Tree[Test] =
    TestSuite {
      'runs_future {
        val eventualString: Future[String] = Future[String] {
          "foo"
        }
        Await.result(eventualString, 5 seconds)
      }
    }
}

当我在sbt控制台上运行test时,我得到:

JavaException: org.scalajs.jsenv.rhino.ScalaJSCoreLib$ClassNotFoundException:
  Rhino was unable to load Scala.js class: ju_concurrent_locks_AbstractQueuedSynchronizer

当我做一个讨厌的黑客而不是Await这样的时候:

while(!future.isCompleted) {}

它永远运行。

是否等待scala.js不起作用?是否无法在测试中使用期货和Await他们的结果?

编辑:它适用于scala.scalajs.concurrent.JSExecutionContext.Implicits.runNow而不是queue,但这会以同步的方式调用期货。

0 个答案:

没有答案