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!!')
    );
  • 相关阅读:
    C#学习笔记---基础入门(二)
    微软Hololens设备 浅分析
    phpstorm 破解方法
    iOS 审核被拒,日志中找不到苹果返回的creashlog的解决办法
    flutter学习之添加第三方应用
    MAC flutter初步学习
    python Django 连接数据库失败的解决方法
    Python之学习菜鸟教程踩的坑
    Python学习之环境搭建
    tableView reload 不闪动方法
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10444364.html
Copyright © 2011-2022 走看看