回调函数

nodejs学习分享

℡╲_俬逩灬. 提交于 2019-12-05 16:24:44
nodejs学习分享 nodejs安装配置 官方下载地址: https://nodejs.org/en/download/ 命令安装 1.下载源码 在官方地址中下载SourceCode 或者 wget http://nodejs.org/dist/v0.10.24/node-v0.10.24.tar.gz 或者 git clone https://github.com/nodejs/node.git 2.解压源码 tar zxvf node-v0.10.24.tar.gz 3.编译安装 cd node-v 0 . 10.24 ./configure --prefix= /usr/local /node/ 0 . 10.24 make make install 4.配置环境变量 vim /etc/profile export NODE_HOME=源码包路径 export PATH= $NODE_HOME /bin: $PATH source /etc/profile 验证是否安装成功 使用命令node -v npm使用介绍 npm是一个包管理工具,类似于Java中的Maven;npmr入门文档见: https://www.npmjs.com.cn/getting-started/what-is-npm/ 使用淘宝NPM镜像 同步频率目前为10分钟一次 npm install -g

理解Node.js的回调(Callback)

流过昼夜 提交于 2019-12-05 16:08:51
一、回调 回调(Callback)是javascript中常用的使用方法,简单而言,就是: 函数作为参数传递到另一个函数中,然后被调用。 同样,在Node.js中,比如I/O操作发生的地方,经常使用回调模式。 通过在回调函数中嵌套回调函数,可以控制事情的顺序(使用回调的根本出发点) ,比如从数据库读取数据后通过回调用另一个函数处理数据。 一 个简单的栗子 , var fs=require('fs'); //请求调用fs(filesystem)模块,在脚本使用 fs.readFile('filename.txt','utf8',function(err,data){ //前两个参数分别为路径和文件编码,第三个参数为回调函数 if(err) throw err; //如果读取文件有误,抛出错误 console.log(data); //否则,来自文件的数据会显示在控制台上 }); 另一个例子是使用http模块创建http客户端和服务器,http.get()方法用来请求Web服务器并获得相应数据。 回调函数的调用发生在远程服务器发回响应之后,由于代码必须进入网络获取数据,无法确切知道数据何时返回。 回调可以让代码在其他事件发生时能够运行,当事件发生时,回调被触发(fired),从而导致回调函数被调用。 var http=require('http'); //请求http模块 http

Node学习基础(四)之文件的流操作以及pipe管道简单举例

时光怂恿深爱的人放手 提交于 2019-12-05 15:45:28
举例说明: // 1.引入模块 let fs =require('fs'); //2.创建读入流 let rs = fs.createReadStream('D:/Pictures/Saved Pictures/testSP.mp4'); //要读取视频的位置 let ws = fs.createWriteStream('testSP.mp4'); //视屏要写入的位置,我这里是默认的项目文件夹下的 //3.监听流的打开和关闭 ws.once('open' ,()=>{ console.log("读入通道打开"); }); ws.once('close' ,()=>{ console.log("读入通道以关闭"); }); rs.once('open' ,()=>{ console.log("写出通道已打开"); }); rs.once('close' ,()=>{ console.log("写出通道已关闭"); }); //4.绑定data rs.on("data", (data)=>{ ws.write(data); }); 如上代码 ,会把一个 从本地通过流操作读写入项目 这个过程就是先引入模块创建读入 根据官网的文档 格式就是这样的 不懂的可以直接看node 官方文档 这里重点解释一下 once,open,close 和 on 待会儿再说pipe管道 .once ('事件名

nodejs异步编程详解

放肆的年华 提交于 2019-12-05 15:44:56
一、从一个简单的案例开始 fs.readdir(path.join(__dirname, './index.js'), (err, files) => { files.foreach((filename, index) => { fs.readFile((filename, 'utf-8', (err, file) => { ... })) }) }) nodejs 特点是单线程、异步、非阻塞,如果代码逻辑涉及到多个回调,就会出现非常可怕的代码,不利于后期的维护。 二、 nodejs为什么会设计成异步编程? 异步编程是随着ajax才火的,所以最熟悉异步编程的就是前端工程师。但在其他编程语言中,异步并不多见,PHP从头到尾就是同步阻塞来执行的,这导致它在复杂的网络应用中无法更好的并发。当然我们并不是在批判PHP,毕竟PHP是世界上最好的语言。PHP代码设计成同步有利于程序员顺序编写业务逻辑,这个有点是不能忽视的。 js就是异步的,浏览器在执行js与UI渲染共用一个进程,如果js采用同步编程,会十分影响用户体验。为什么js不是多线程呢?首先创建线程和执行线程上下文切换的开销较大,其次多线程编程经常面临锁、状态同步等问题。js单线程的编写方式比较符合人按顺序思考的方式,是主流的编程方式。但是单线程无法对硬件资源充分的利用, node利用单线程,远离多线程、状态同步等问题,利用异步I/O

Nodejs异步非阻塞式IO/事件驱动IO原理

不想你离开。 提交于 2019-12-05 15:42:26
关于 node.js Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。 Node.js 几乎每一个 API 都是支持回调函数的。 Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。 Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数 事件驱动程序 Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。 当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。 这个模型非常高效可扩展性非常强,因为webserver一直接受请求而不等待任何读写操作。(这也被称之为非阻塞式IO或者事件驱动IO) 在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。 整个事件驱动的流程就是这么实现的,非常简洁。有点类似于观察者模式,事件相当于一个主题(Subject),而所有注册到这个事件上的处理函数相当于观察者(Observer)。 Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件: // 引入 events 模块

nodejs 异步和回调函数/事件

烈酒焚心 提交于 2019-12-05 15:38:54
nodejs nodejs是单线程单进程应用程序,但是V8引擎提供的异步执行回调接口可以处理大量的并发,nodejs性能非常高。nodejs积分每一个api都支持回调函数。 回调函数 要点:异步函数将回调函数作为最后一个参数,回调函数接受错误对象为第一个参数。异步编程依托回调来实现,nodejs异步编程直接体现酒是回调。 阻塞代码实列 添加一个app.js data.txt var fs = require('fs'); var data = fs.readFileSync('data.txt'); console.log(data.toString()); console.log('程序执行完成'); 执行 非阻塞代码 /** * * 回调作为异步最后一个 * 错误对象作为回调第一个参数 * * */ fs.readFile('data.txt', function (err, data) { if (err) return console.error(err); console.log(data.toString()); }) console.log('程序执行完成'); 运行: 事件 驱动原理:nodejs使用事件驱动模型,当webservice接收到请求,就关闭它然后惊喜处理,然后去服务下一个web请求,当这个请求完成,它被放回处理列队,当列队达到列开头,这个结果被返给用户

nodejs异步编程

∥☆過路亽.° 提交于 2019-12-05 15:37:52
nodejs异步编程,老生常谈。今天总结一下,算是巩固学习吧。 以读文件为例,同步编程这么写: var fs = require ( "fs" ); var fileContent = fs.readFileSync( 'sync.js' , 'utf8' ); console.log(fileContent); console.log( "something else" ); 异步编程咋整?回调函数伺候之: var fs = require ( "fs" ); fs.readFile( 'async.js' , 'utf8' , function (err,data) { if (!err) { console.log(data); } }); console.log( "something else" ); 回调函数太棒了,程序可以异步了。不过回调这东西有点好过头了,当回掉函数嵌套太多时候,程序写起来相当烦人。我想每个人都知道回调地狱(callback hell)。 javascript这个又爱又恨的东西这几年发展很快,投入的很大精力去改进的东西很多东西都是为了避免回调地狱。到现在(2016-5-17),es7草案已经提出,下面我们就以es7的视野来总结一下如何避免callback hell来异步编程。 模块化代码 使用生成器 使用promise 使用时间驱动编程

nodejs学习笔记》入门级教程

*爱你&永不变心* 提交于 2019-12-05 15:15:10
简单的说 Node.js 就是运行在服务端的 JavaScript。它的优势是基于Google的V8引擎(执行速度非常快、性能非常好、社区活跃),更具诱惑力的是采用node+mongodb开发中小型网站速度更快(据说成本更低)。 目录 1.1. Node简介 1.2. 下载安装 1.3. 模块机制 1.4. 异步I/O 1.5. 异步编程 1.6. 核心API 1.6.1. Event 1.6.2. HTTP 1.6.3. I/O 1.7. 全局对象&全局变量 1.8. util模块 1.9. assert断言 1.10. npm 1.10.1. package.json 1.10.2. 命令 1.10.3. 远程镜像 1.11. Cluster模块 1.12. PM2模块 1.1. Node简介 1.2. 下载安装 https://nodejs.org/zh-cn/download/releases/ 1.3. 模块机制 1.4. 异步I/O 1.5. 异步编程 1.6. 核心API 1.6.1. Event events是Node.js最重要的模版,原因是Node.js本身架构就是事件式的,而它提供了唯一的接口。所以开成Node.js事件编程的基石。events模块不仅用于用户代码与Node.js下层事件循环的交互。还几乎被所有的模块依赖。 events模块只提供了一个对象

Nodejs基础学习(1)

六眼飞鱼酱① 提交于 2019-12-05 15:05:44
极客学院Nodejs学习,还有菜鸟课程 Nodejs资料: https://github.com/nswbmw/N-blog 1.Nodejs解决的问题 1、Node.js 在前端开发中,主要是作为工具,比如打包工具 Webpack / Gulp 等,都是使用 Node.js 编写的 2、Node.js 并不直接解决前端问题,只是作为前端开发的工具 3、作为前端开发中的工具角色,在没有它之前, js / css 的打包,压缩,一般使用各种命令行工具,但无法做到与 js 的深度整合,例如,完全不能实现像 webpack / browserify 一样根据 js 中的 require / import 来打包文件 另外,Node.js 主要是作为一个后端语言。它可以像 PHP / Python 一样编写后端逻辑。但 JavaScript 生来就是以事件驱动的,所以它非常适合处理各种 IO(网络请求、数据库、存储操作等)。 2.npm全局安装和局部安装 可以参考文章: https://www.cnblogs.com/linziwei/p/7786895.html https://www.cnblogs.com/PeunZhang/p/5629329.html https://yq.aliyun.com/articles/36217 附注:局部安装时候,命令行窗口运行位置是在项目文件夹下

c++回调函数 callback

霸气de小男生 提交于 2019-12-05 14:53:09
C++中实现回调机制的几种方式 (1)Callback方式 Callback的本质是设置一个函数指针进去,然后在需要需要触发某个事件时调用该方法, 比如Windows的窗口消息处理函数就是这种类型。比如下面的示例代码,我们在Download完成时需要触发一个通知外面的事件: [cpp] view plain copy typedef void (__stdcall *DownloadCallback)( const char * pURL, bool bOK); void DownloadFile( const char * pURL, DownloadCallback callback) { cout << "downloading: " << pURL << "" << endl; callback(pURL, true ); } void __stdcall OnDownloadFinished( const char * pURL, bool bOK) { cout << "OnDownloadFinished, URL:" << pURL << " status:" << bOK << endl; } (2)Sink方式 Sink的本质是你按照对方要求实现一个C++接口,然后把你实现的接口设置给对方,对方需要触发事件时调用该接口, COM中连接点就是居于这种方式