代码之家  ›  专栏  ›  技术社区  ›  leogoesger

从数据迁移。关于处理拒绝的民间故事任务

  •  1
  • leogoesger  · 技术社区  · 6 年前

    在里面 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的旧版本),我可以使用reject,这就是为什么它仍然在那里工作。使用新版本的Task,我现在该怎么做?

    1 回复  |  直到 6 年前
        1
  •  1
  •   leogoesger    6 年前

    好吧,这太傻了!由于某种原因,我无法在文件上立即找到这个解决方案。这就是为什么我进口了 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`);
      },
    });