[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!!')
);
复制代码

 

posted @   Zhentiw  阅读(231)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2018-02-27 [CSS3] Create Dynamic Styles with CSS Variables
2017-02-27 [Flow] The Fundamentals of Flow
2017-02-27 [Angular] Some performance tips
2017-02-27 [Ramda] Rewrite if..else with Ramda ifElse
2016-02-27 [Hapi.js] Up and running
点击右上角即可分享
微信分享提示