返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Node.jsContinuationPassingStyle(CPS与回调)
  • 877
分享到

Node.jsContinuationPassingStyle(CPS与回调)

2024-04-02 19:04:59 877人浏览 八月长安
摘要

目录前言嵌套回调回调地狱回调与CPS前言 前面我们介绍了node的基础模块,今天我们来实践一个更加进阶的写法,那就是node的异步处理,由于过多的事件堆积在一起嵌套使用容易引起回调地

前言

前面我们介绍了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回调内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Node.jsContinuationPassingStyle(CPS与回调)

本文链接: https://lsjlt.com/news/152112.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Node.jsContinuationPassingStyle(CPS与回调)
    目录前言嵌套回调回调地狱回调与CPS前言 前面我们介绍了node的基础模块,今天我们来实践一个更加进阶的写法,那就是node的异步处理,由于过多的事件堆积在一起嵌套使用容易引起回调地...
    99+
    2024-04-02
  • PHP对京东联盟CPS的API调用
    在调用接口之前,先要取得授权,这个看看接口文档就可以了。地址如下:https://jos.jd.com/doc/channel.htmid=152 在京东云控制台:https://c...
    99+
    2024-04-02
  • node.js回调函数之阻塞调用与非阻塞调用
    首先,node.js作为javascript运行平台,它采用了事件驱动和异步编程的方式,通过事件注册和异步函数,开发人员可以提高资源利用率,服务器的性能也能得到改善。其次,对于前端人来说,node.js作为...
    99+
    2022-06-04
    回调 与非 函数
  • JavaScript中异步与回调的基本概念及回调地狱现象
    目录JavaScript异步与回调一、前言二、异步函数三、回调函数四、回调的回调五、回调地狱六、总结JavaScript异步与回调 一、前言 在学习本文内容之前,我们必须要先了解异步...
    99+
    2024-04-02
  • Android onLoadFinished与onLoaderReset回调详解及实例
    Android onLoadFinished与onLoaderReset回调详解及实例 onLoadFinished 这个方法是在前面已创建的加载器已经完成其加载过程后被调用,...
    99+
    2022-06-06
    Android
  • PHP版滴滴cps联盟Api签名生成和接口调用方法分享
    最近准备把我自己开发的淘客系统接入滴滴联盟平台,做打车优惠券搞佣金。 由于淘客系统本身是PHP开发的,所以只能采用PHP的代码接入滴滴联盟Api 下面把滴滴联盟签名生成和接口调用的代码分享给大家  来源地址:https://blog.c...
    99+
    2023-09-16
    滴滴联盟Api签名
  • JavaScript中异步与回调的基本概念及回调地狱现象是什么
    本文小编为大家详细介绍“JavaScript中异步与回调的基本概念及回调地狱现象是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript中异步与回调的基本概念及回调地狱现象是什么”文章能帮...
    99+
    2024-04-02
  • 理解与使用JavaScript中的回调函数
    目录概述什么是回调或者高阶函数回调函数是怎样运作的?回调函数是闭包实现回调函数的基本原理使用命名或匿名函数作为回调传递参数给回调函数在执行之前确保回调函数是一个函数使用this对象的...
    99+
    2024-04-02
  • Java中的闭包与回调方法分析
    本篇内容介绍了“Java中的闭包与回调方法分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!闭包是一个可调用的对象,它记录了一些信息,这些信...
    99+
    2023-06-17
  • 详解Android中接口回调、方法回调
    在Android开发中我们很多地方都用到了方法的回调,回调就是把方法的定义和功能导入实现分开的一种机制,目的是为了解耦他的本质是基于观察者设计模式,即观察者设计模式的的简化版,...
    99+
    2022-06-06
    方法 回调 接口 Android
  • python调用golang并回调
    最近折腾python交互,也真够呛的,一连玩了好几天,被虐的不要不要的。天天各种百度,Google之间。好吧,废话少说,转入我们的正题。其实,py调用go一般的函数,只是第一道坎,正主其实是py调用go,并且go还回调py!!!网上其实这...
    99+
    2023-01-31
    回调 python golang
  • golang 函数调试与分析工具的陷阱与回避
    Go 函数调试与分析工具的陷阱与规避 在 Go 应用程序中进行调试和分析时,有许多有用的工具可供使用,例如:pprof、gotrace和go tool trace。然而,这些工具的使用...
    99+
    2024-05-06
    调试 golang
  • JQUERY + location.reload()回调
    在使用`location.reload()`方法刷新页面时,是没有回调函数的。因为`location.reload()`方法会立即刷...
    99+
    2023-09-26
    jQuery
  • JVM的垃圾回收机制详解与调优
    这篇文章主要讲解了“JVM的垃圾回收机制详解与调优”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JVM的垃圾回收机制详解与调优”吧!JVM的gc概述gc即垃圾收集机制是指jvm用于释放那些不...
    99+
    2023-06-03
  • Android应用中onLoadFinished与onLoaderReset如何进行回调
    这篇文章给大家介绍Android应用中onLoadFinished与onLoaderReset如何进行回调,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 onLoadFinished与onLoaderRese...
    99+
    2023-05-31
    android onloadfinished onloaderreset
  • JavaScript如何禁用回调列表中的回调
    本篇内容介绍了“JavaScript如何禁用回调列表中的回调”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2024-04-02
  • PHP函数的回调函数和回调参数
    PHP是一门十分流行的开源编程语言,主要用于web开发。函数是PHP中的一个基本特性,函数的回调函数和回调参数则是函数中比较重要的概念之一。回调函数是指将函数作为参数传递给另一个函数,在另一个函数中通过调用该函数来完成某个操作。回调参数则是...
    99+
    2023-05-18
    回调函数 PHP函数 回调参数
  • C++ 函数调用调试技巧:参数传递和返回值的跟踪与调试
    c++++ 函数调用调试技巧:参数传递:gdb 使用 call 命令,lldb 使用 expression 命令。返回值:gdb 使用 print 命令,lldb 使用 expr 命令。...
    99+
    2024-05-05
    c++ 函数调用
  • Android回调与观察者模式的实现原理
    回调与观察者模式的实现原理:废话不多说,直接上Demo回调的原理: 观察者模式: A类中定义一个被观察者画家 package com.example.view;...
    99+
    2022-06-06
    观察者模式 Android
  • Jquery回调对象与延迟对象用法详解
    目录一、回调对象Callbacks1、定义和用法2、支持的 Flags 参数3、方法清单:二、延迟对象:deferred1、$.Deferred()定义和用法2、deferred.p...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作