zoukankan      html  css  js  c++  java
  • [Functional Programming] Use Task/Async for Asynchronous Actions

    We refactor a standard node callback style workflow into a composed task-based workflow.

    Original Code:

    const app = () => {
        fs.readFile('config.json', 'utf-8', (err, content) => {
            if (err) throw err;
    
            const newContents = content.replace(/8/g, '6');
    
            fs.writeFile('config1.json', newContents, (err, _) => {
                if (err) throw err;
                console.log('success!');
            })
        });
    }
    
    app();

    Using Task:

    const readFile = (filename) =>
        new Task((rej, res) =>
            fs.readFile(filename, 'utf-8', (err, content) => {
                err ? rej(err) : res(content);
            }));
    const writeFile = (filename, content) =>
        new Task((rej, res) =>
            fs.writeFile(filename, content, (err, success) => {
                err ? rej(err) : res(success);
            }));
    
    const TaskApp = readFile('config.json')
            .map(content => content.replace(/8/g, '6'))
            .chain(newContent => writeFile('config1.json', newContent));
    
    TaskApp.fork(e => console.error(e),
              x => console.log('success!'));

    Using Async:

    const Async = require('crocks/Async');
    const fs = require('fs');
    
    const readF = (filename) =>
      Async((rej, res) =>
        fs.readFile(filename, 'utf-8', (err, content) => {
            err ? rej(err): res(content);
        }));
    
    const writeF = (filename, content) =>
        Async((rej, res) =>
            fs.writeFile(filename, content, (err, success) => {
                err ? rej(err) : res(success)
            }));
    
    const AsyncApp = readF('config.json')
            .map(content => content.replace(/8/g, '6'))
            .chain(newContent => writeF('config2.json', newContent));
    AsyncApp.fork(
        e => console.error(e),
        x => console.log('success!!')
    );
  • 相关阅读:
    函数集
    2019.1.7
    第九次团队作业-测试报告与用户使用手册
    α版本升升备忘录下载链接
    系统设计和任务分配(个人)
    团队作业说明
    备忘录-团队选题报告
    需求分析与原型设计---升升备忘录
    项目——四则运算器
    Hello Django
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10444364.html
Copyright © 2011-2022 走看看