2

Node.FS.Aff.readTextFile を介してファイルから読み取ったファイルのコンテンツを取得しようとしているため、非同期効果を使用しています。

しかし、私の質問はより一般的です。

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

Leftだから私はorRight値を取得したい。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 ランタイムでブロックする方法がないため、no が存在することに注意してください。

于 2016-02-16T17:36:03.040 に答える