Node.js Continuation Passing Style( CPS与回调)

 更新时间:2022年06月21日 10:24:28   作者:​ 一只大加号   ​  
这篇文章主要介绍了Node.js Continuation Passing Style,将回调函数作为参数传递,这种书写方式通常被称为Continuation Passing Style(CPS),它的本质仍然是一个高阶函数,CPS最初是各大语言中对排序算法的实现

前言

前面我们介绍了node的基础模块,今天我们来实践一个更加进阶的写法,那就是node的异步处理,由于过多的事件堆积在一起嵌套使用容易引起回调地狱,所以在日常开发中异步的使用显得异常的重要,在开发中我们也经常会遇到某些接口需要先后调用的问题,那么异步是一个很好的解决方案,所以今天来给这个知识点做一个笔记。

嵌套回调

我们先用一个小栗子,书写一个方法接受一个参数并将参数读取的数据返回,简单来封装一个文件读取的方法。

var fs = require('fs');
function read(path){
    fs.readFile(path,function(err,data){
        return data;
    })
}
let a = read('a.txt');
console.log(a);
//如果存在多个需要读取的文件,而由于各个文件的大小不相同,可能读取的速度也不同,这样的话可能会导致执行后返回的顺序不一样,但如果我们需要读取的文件是有顺序的,那这样就会造成一些问题了
read(a.txt)
read(b.txt)
read(c.txt)

回调地狱

如果我们不用异步进行解决,我们需要在读取b文件之前需要用到a文件之间的某些信息,那么我们是需要在a文件读取完成之后再进行执行读取b的操作,通常是这么写的

fs.readFile(path,function(err,data){
        console.log(data);
        fs.readFile(Path2D,function(err,data){
            console.log(data);
        })
    })

如果我们只是单纯的这么写,看上去确实是没有问题的,因为我们只需要用来读取来个文件,但如果文件相互依赖比较多的话,需要用到的嵌套回调会更多,这样就会形成所谓的回调地狱的问题。不仅嵌套的层数增加,代码的可维护性也变得更低

回调与CPS

将回调函数作为参数传递,这种书写方式通常被称为Continuation Passing Style(CPS),它的本质仍然是一个高阶函数,CPS最初是各大语言中对排序算法的实现。

CPS风格回调:

var callBack = function(err,data){
    if(err){
        console.log(err);
    }
    console.log(data.toString());//666
    
}
fs.readFile('./异步/aaa.txt',callBack);

如果重复调用了readFile都是同一个回调的话,那么CPS可以帮我们节省掉很多的代码,如果是多个回调不相同的情况下,CPS可以在一定程度上解决回调嵌套的问题

var callBack = function(err,data){
    if(err){
        console.log(err);
    }else{
        fs.readFile('./异步/a2.txt',callBack2);
    }
    
}
var callBack2 = function(err,data){
    if(err){
        console.log(err);
    }else{
        fs.readFile('./异步/a3.txt',callBack3);
    }
    
}
var callBack3 = function(err,data){
    if(err){
        console.log(err);
    }else{
        // fs.readFile('./异步/a3.txt',callBack3);
    }
    
}
fs.readFile('./异步/a1.txt',callBack);

我们可以看出来CPS的回调比嵌套回调更加的美观一点,但是业务逻辑仍然散发在不同的callback中,代码还是会显得比较冗余,我们下一节来看一下async模块对回调的简化

到此这篇关于Node.js Continuation Passing Style( CPS与回调)的文章就介绍到这了,更多相关Node.js CPS回调内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • node.js下LDAP查询实例分享

    node.js下LDAP查询实例分享

    这篇文章主要介绍了node.js下LDAP查询实例分享的相关资料,需要的朋友可以参考下
    2015-09-09
  • Node.js实现兼容IE789的文件上传进度条

    Node.js实现兼容IE789的文件上传进度条

    这篇文章给大家介绍了如何实现兼容IE789的文件上传进度条,如果你的工作用过上传图片或上传大文件啥的,一般在IE低版本浏览器里,会切换到用flash解决,可是有些人肯定不会为了老旧IE的进度条而去学flash,那么下面来一起看看吧。
    2016-09-09
  • 详解如何在Node.js中使用中间件处理请求

    详解如何在Node.js中使用中间件处理请求

    在Node.js中,处理中间件是处理HTTP请求和响应的一个常见方式,甚至扮演着至关重要的角色,本文将介绍如何在Node.js中使用中间件来处理请求,感兴趣的可以了解下
    2025-02-02
  • mocha的时序规则讲解

    mocha的时序规则讲解

    今天小编就为大家分享一篇关于mocha的时序规则讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • 探索node之事件循环的实现

    探索node之事件循环的实现

    这篇文章主要介绍了探索node之事件循环的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Node.js中环境变量process.env的一些事详解

    Node.js中环境变量process.env的一些事详解

    这篇文章主要给大家介绍了关于Node.js中环境变量process.env的一些事,文中通过示例代码介绍的非常详细,对大家学习或者使用node.js具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • node版本管理器Volta的简单使用

    node版本管理器Volta的简单使用

    Volta是一款强大的JavaScript工具管理器,它简化了命令行工具的安装和管理,本文主要介绍了node版本管理器Volta的简单使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • 13 个npm 快速开发技巧(推荐)

    13 个npm 快速开发技巧(推荐)

    这篇文章主要介绍了13 个npm 快速开发技巧,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-07-07
  • node.js 使用process.argv获取和处理命令行参数的操作

    node.js 使用process.argv获取和处理命令行参数的操作

    process.argv是Node.js中用于获取命令行参数的数组,基本使用方法是通过命令行传递参数并在脚本中访问这些参数,参数可以根据需求进行处理,也可以使用第三方库如minimist或yargs来简化参数解析,这些工具可以帮助开发者有效地管理和使用命令行参数,提高脚本的灵活性和功能性
    2024-10-10
  • 解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题

    解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题

    这篇文章主要介绍了解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11

最新评论