我试图通过Node.FS.Aff.readTextFile获取我从文件中读取的一些文件内容,因此使用异步效果.
但是我的问题更为笼统.
myFile::forall r. String -> Aff ( fs :: FS | r) (Either Error String)
myFile file = attempt $ readTextFile Node.Encoding.UTF8 file
Run Code Online (Sandbox Code Playgroud)
所以我想得到Left或者Right价值.如果它在哪里Eff而不是Aff我可以使用
let x = unsafePerformEff $ myFile "someFile.txt"
Run Code Online (Sandbox Code Playgroud)
谢谢
你永远不应该试图通过使用来"获取"这个值unsafePerformEff,因为它确实是不安全的,并且会在任何更大的代码库中引入严重的错误.
相反,您可以使用do符号来"获取"值.例如:
do
result <- attempt $ readTextFile Node.Encoding.UTF8
case result of
Left error -> ...
Right file -> ...
...
Run Code Online (Sandbox Code Playgroud)
请注意,不存在unsafePerformAff,因为计算是异步的,并且无法在Javascript运行时中阻塞.