問題タブ [scotty]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
168 参照

haskell - Scotty サーバーで新しいスレッドをフォークする

Scotty で 2 つの API を使用して Web サーバーのプロトタイプを作成しています。

  • /add/:id指定された ID で非同期タスクを開始します。
  • /cancel/:id指定された ID のタスクを強制終了します。

基本的に、クライアントはいくつかの Id を提供することで非同期タスクを開始し、ID によって現在のタスクを強制終了することもできます。

Control.Concurrent.forkIOスレッドを開始するために使用し、 Map: である Scotty グローバル状態に保存した をforkIO返します。ThreadIdtype AppState = Map TaskId ThreadId

/add/:idすぐには戻りませんが、タスクが完了するのを待って、結果をクライアントに返します。

forkIO私の問題はとの混合MonadIO m => ActionT Text m ()です。渡したアクションtext :: Text -> ActionT Text m ()の完了後に呼び出せるようにする必要があります。IO ()forkIO

これは明らかMonadIO mIOエラーですが、頭を悩ませて解決策を見つけることができません。

これは完全な例です: