2

我正在尝试获取通过 Node.FS.Aff.readTextFile 从文件中读取的一些文件内容,因此使用异步效果。

但是我的问题更笼统。

myFile::forall r. String -> Aff ( fs :: FS | r) (Either Error String)
myFile file = attempt $ readTextFile Node.Encoding.UTF8 file

所以我想得到LeftorRight值。如果它Eff不是Aff我可以使用的地方

let x = unsafePerformEff $ myFile "someFile.txt"

谢谢

4

1 回答 1

5

您永远不应该尝试通过使用来“获取”该值unsafePerformEff,因为这样确实不安全,并且会在任何更大的代码库中引入严重的错误。

相反,您可以使用do符号来“获取”这些值。例如:

do
  result <- attempt $ readTextFile Node.Encoding.UTF8
  case result of 
    Left  error -> ...
    Right file  -> ...
  ...

请注意,不存在unsafePerformAff,因为计算是异步的,并且无法在 Javascript 运行时中阻塞。

于 2016-02-16T17:36:03.040 回答