1

パッケージではdata.task、次のように API 呼び出しを解決または拒否できます。

import Task from 'data.task';
import fs from 'fs';

const readFile = (filename, enc) => {
  return new Task((rej, res) =>
    fs.readFile(filename, enc, (err, contents) => {
      err ? rej(err) : res(contents);
    })
  );
};

folktaleの新しいバージョンでそれを達成するにはどうすればよいTaskですか? リクエストを解決できますが、拒否するにはどうすればよいですか? 私は次のことを試しました:

const {task, rejected} = require('folktale/concurrency/task');
import fs from 'fs';

const readFile = (filename, enc) => {
  return task(res => {
    fs.readFile(filename, enc, (err, contents) => {
      err ? rejected(err) : res.resolve(contents);
    });
  });
};

const writeFile = (filename, contents) => {
  return task(res => {
    fs.writeFile(filename, contents, (err, success) => {
      err ? rejected(err) : res.resolve(success);
    });
  });
};

const app = readFile('FILE_DOESNOT_EXIST.json', 'utf-8')
  .map(contents => contents.replace(/8/g, '6'))
  .chain(contents => writeFile('config1.json', contents));

app.run().listen({
  onCancelled: () => {
    console.log('the task was cancelled');
  },
  onRejected: () => {
    console.log('something went wrong');
  },
  onResolved: value => {
    console.log(`The value is Good`);
  },
});

存在しないファイルを指定すると、onRejected ハンドラーが呼び出されません。

何が表示されると思いますか: プログラムに存在しないファイルを読み取らせたので、 onRejected を実行してログに記録する必要がありますsomething went wrong

今何が見えますか: 何もありません。プログラムはバグ アウトしませんが、何も生成せず、単に通常どおりに実行されます。

(Task の古いバージョン) を使用data.taskする場合、reject を使用できるため、そこでも機能します。新しいバージョンの Task でどうすればよいですか?

4

1 に答える 1