2017-10-07 143 views
1

Scala.js中的未來可以睡在裏面嗎?睡在Scala.js的未來中

喜歡的東西:

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

如果我試試這個,然後我得到一個異常說sleep方法不存在。

看起來好像有可能睡在JS:What is the JavaScript version of sleep()?即使不可能阻止。

+0

只需使用'從鏈接的解決方案:)(我假設你完全明白你爲什麼不想做的大部分時間)pausecomp'。 – gzm0

+0

我認爲下面給出的答案是完全正確的,並且沒有理由爲什麼有人不應該在任何時候推遲未來。 – jhegedus

回答

3

你真的不能停頓,今後身體的中部,但你可以在你的未來作爲後續註冊到「延遲」未來,你可以定義爲:您可以再

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

和使用如:

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

非常感謝!非常好 ! – jhegedus

+0

根據你是真的想睡一段時間還是希望稍後會發生某些事情(通常需要進行測試),請注意jsExt庫中的notYet函數,它的寬鬆版本爲https ://github.com/jducoeur/jsext –

+0

嗯......我真的不明白你的意思......後來呢?誰決定什麼是後來?後來關於什麼?你有一個例子嗎? – jhegedus