2017-10-07 9 views
1

Scala.jsの未来の中で眠ることは可能ですか?以下のようなScala.jsの未来の中で眠る

何か:私はこれをしようとした場合

Future { 
    Thread.sleep(1000) 
    println("ready") 
} 

はその後、私はsleep方法が存在しないという例外を取得します。

ブロックすることはできませんが、JS:What is the JavaScript version of sleep()?で寝ることができるようです。

+0

:として使用します。 – gzm0

+0

私は以下の答えは完全にうまくいくと思うし、誰かが未来を遅らせることを望むときはいつも、それを使用してはならない理由はありません。 – jhegedus

答えて

3

あなたは本当に将来の身体の途中で一時停止することはできませんが、あなたのように定義することができ、「遅延」未来へのフォローとして、あなたの未来を登録することができます。

def delay(milliseconds: Int): Future[Unit] = { 
    val p = Promise[Unit]() 
    js.timers.setTimeout(milliseconds) { 
    p.success(()) 
    } 
    p.future 
} 

とあなたがすることができますただ、(私はあなたがこの時間のほとんどを行うにはしたくないだろう理由を十分に認識していると仮定)リンクされた溶液から `pausecomp` :)を使用し

val readyLater = for { 
    delayed <- delay(1000) 
} yield { 
    println("ready") 
} 
+0

多くの感謝!非常に素晴らしい ! – jhegedus

+0

実際に特定の時間をスリープ状態にしたいのか、何かを "後で"(テストのためにしばしば必要となる)したいだけの場合、jsExtライブラリのnotYet関数に注意してください。これはもっと緩いバージョンです:https ://github.com/jducoeur/jsext –

+0

ええと...私は本当にあなたが意味することを得ていない...後で?後で何が決まるの?後で何について?あなたは例がありますか? – jhegedus