在处理拒绝时从data.task迁移到民间故事

时间:2018-05-31 23:15:23

标签: javascript functional-programming folktale

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 Taskconst {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`); }, }); 中实现这一目标?我可以解决请求,但我如何拒绝?我尝试过以下方法:

something went wrong

当我提供的文件不存在时,onRejected处理程序不会被调用。

我希望看到什么: 由于我让程序读取了一个不存在的文件,它应该运行onRejected,它应该记录data.task

我现在看到了什么: 没有。该程序没有错误,但它也没有产生任何东西,它只是正常运行。

当使用mask(旧版本的Task)时,我可以使用拒绝,这就是为什么它仍然在那里工作。我现在如何使用新版本的任务?

1 个答案:

答案 0 :(得分:1)

好的,这真是太傻了!出于某种原因,我无法立即在doc上找到此解决方案。这就是为什么我从rejected导入task ...

基本上来自任务的resolver函数不仅有resolve,还有reject,这应该是显而易见的,但它不在文档中。

所以这是工作代码:

import {task} from 'folktale/concurrency/task';
import fs from 'fs';

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

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

const app = readFile('confg.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`);
  },
});