2016-09-17 13 views
1

ルータのポスト( "/ some")パスにFuture [A]が結果(最後の行)としてある場合、Ajaxクライアントは応答を取得できず、aタイムアウト。待つことはできません。将来のonComplete/onSuccess {...}は正常に動作しますが、サーバーに対しては、それをクライアントに応答としてどのように変換するのでしょうか? (Scalatraフレームワーク)将来のAjax応答待ち(scala)

サーバー:

post("/stations/test") { 
    Future[Int] { 
    // parse jsonData ... 
    Thread.sleep(3000) 
    1 
    }.onComplete { x => 
    // do something on server ... 
    } 
} 

クライアント:

@JSExport 
def testFuture() = { 
    val request = Ajax.post("/stations/test", jsonData) 
} 

答えて

0

onComplete戻りUnit。しかし、サーバーからクライアントに適切な応答を送信する必要があります。今後はmapを使用して応答を作成してください。

post("/stations/test") { 
    Future[Int] { 
    // parse jsonData ... 
    Thread.sleep(3000) 
    1 
    }.map { data => 
    Response(data) 
    } 
} 
+1

ありがとうございました! Response(data)の代わりにレスポンス(HttpServletResponseの型)を指定するとうまくいきます。良い週末を! .recover {// ... 場合dom.ext.AjaxException(REQ)=> }( "ABC"、 "/ステーション/試験") Ajax.post: とクライアント側は次のようでなければなりません.map(req => { //すべてのステータスコードを処理する }) – aepetelin