0

REST 调用使用 spray.io。它使用各种函数验证该调用中的请求,包括查询数据存储的中间函数。如果一切正常,那么它将写入所述数据存储。在这种情况下,最多有 4 个 IO 操作:HTTP 请求、数据读取、数据写入和 HTTP 响应。如果我决定使用 IO monad,我将如何构造执行 IO,因为我有一些可能需要也可能不需要(即,如果某些验证失败,则可能不需要进行读写操作)穿插非 IO 功能?大概,首先我可以先忽略喷涂的东西,并将评估视为在喷涂完成后开始。但是如何将 IO 函数与非 IO 函数组合起来呢?我是否必须将非 io 的东西提升到 io monad 中?

4

1 回答 1

1

The short answer is Futures. In order to be non-blocking your IO operations should return Futures that you map to other Futures. In Spray you can complete the request with a Future.

于 2014-05-08T15:50:22.223 回答