【问题标题】:migrating from data.task to folktale on handling rejection从 data.task 迁移到处理拒绝的民间故事
【发布时间】:2018-11-11 01:03:26
【问题描述】:

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);
    })
  );
};

我将如何在Task 的新folktale 版本中实现这一点?我可以解决请求,但如何拒绝?我尝试了以下方法:

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

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

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

【问题讨论】:

    标签: javascript functional-programming folktale


    【解决方案1】:

    好吧,这真的很愚蠢!由于某种原因,我无法立即在文档上找到此解决方案。这就是我从 task 导入 rejected 的原因...

    基本上来自任务的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`);
      },
    });
    

    【讨论】:

      猜你喜欢
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2018-12-19
      相关资源
      最近更新 更多