手机版

Node.js (3)我的学习路径——node . js函数、回调、同步和异步代码和事件循环

时间:2021-09-10 来源:互联网 编辑:宝哥软件园 浏览:

1、node.js的作用,

I/O是输入/输出的缩写,例如,在键盘上键入文本,输入文本,在屏幕上看到文本显示和输出。移动鼠标,在屏幕上看到鼠标的移动。终端的输入和看到的输出。等等。)node.js想要解决的问题,(处理输入,输入,高并发。如果网游可能有几百万玩家,就会有几百万的投入等。)(node.js的合适类别:Node.js最适合应用需要在网络上收发数据的时候。这可能是第三方API、联网设备或浏览器与服务器实时通信中并发的含义。(并发这个术语描述的是事情会同时发生,可能会相互影响。Node的基于事件的I/O模型让我们不用担心互锁和并发(多线程异步I/O中的两个常见问题)演示网络I/O

javascript,javascript

var http=require('http '),URL=[' www . Baidu.com ',' www.10jqka.com.cn ',' www . duokan.com '];函数fetch page(URL){ var start=new Date();http.get({host:url},function(RES){ console . log(' get response from : ' URL);console.log('Request took: ',new Date() - start,' ms ');});} for(var I=0;iur ls . length;I){ FetchPage(URL[I]);}名为,node.js我们在终端运行node.js输出:

我们要求node.js访问三个URL,并报告收到的响应和花费的时间。我们可以看到两个输出时间是不同的。受各种因素的影响,比如解析DNS请求的时间,服务器的繁忙程序等等。为什么javascript是一种事件驱动的语言?javascript围绕最初与文档对象模型(DOM)相关的事件架构展开。开发人员可以在事件发生时做事情。这些事件包括用户点击一个元素,页面完成加载,等等。使用事件,开发人员可以为事件编写侦听器,这些侦听器在事件发生时被触发。二、回调(Callback)1、什么是回调2、解析回调是指将一个函数作为参数传递给另一个函数,通常在第一个函数完成后调用。示例:如jquery、Js代码中的hide()方法

1,$('p ')。隐藏('慢');2,$('p ')。hide('slow ',function(){alert('该段落现已隐藏')});回调是可选的,1不需要回调2,有回调,段落隐藏完成后会调用,并显示提醒提示。为了看出有回调和没有回调的代码之间的区别,Js代码

$('p ')。隐藏('慢');提醒(“该段落现已隐藏”);//1 $('p ')。hide('slow ',function(){alert('该段落现已隐藏')});//2 1、没有回调,执行顺序一样。但是我们可以看到P段还没有完全隐藏,警报会出来。2、有一个回调,执行是在hide完成后,分析告警中的回调Js代码。

函数have早餐(食物、饮料、回调){ console . log(' have barakfast of ' food ','饮料');if(回调类型of(回调)==' function '){ callback();} }早餐(' foast ',' coffee ',function(){ console.log('已完成早餐。“该去上班了!”);});输出:

喝了一杯咖啡,完成了早餐。上班时间到了!这里用三个参数创建一个函数,第三个参数是callback,必须是函数。have早餐函数在控制台中记录你吃了什么,然后调用作为参数传递给它的回调函数。Node.js如何使用回调

使用node.js中的文件系统模块从磁盘读取文件内容的示例Js代码

var fs=require(' fs ');fs.readFile('somefile.txt ',' utf8 ',函数(err,data){ if(err)throw err;console.log(数据);});结果是:somefile.txt中的内容.1.fs(文件系统)模块被请求在脚本中使用2。文件系统上的文件路径作为第一个参数提供给fs.readFile方法3,第二个参数是utf8,表示文件代码4。回调函数作为第三个参数提供给fs.readFile方法5。回调函数的第一个参数是err,用来保存读取文件时返回的错误6,回调函数的第二个参数是打他。7.一旦文件被读取,回调将被调用8。如果err为真,将引发错误9。如果err为false,文件中的数据可以使用10。在这种情况下,数据将被记录在控制台上。此外,http模块使开发人员能够创建http客户端和服务器。

javascript,javascript

var http=require(' http ');http . get({ host : ' shape shed.com ' },function(RES){ console . log(' get response : ' RES . statuscode);}).on('error ',函数(e){ console . log(' get error : ' e . message);});结果:Got response:2001,请求http模块在脚本中使用2,并为http.get()方法提供两个参数3,第一个参数是option对象。在这个例子中,需要获取shapeshed.com的主页4,第二个参数是一个回调函数5,以响应为参数。当远程服务器返回相应的一个时,回调函数将被触发。6.在回调函数中记录响应状态代码,如果有错误就记录。接下来,让我们看看有4个不同的I/O操作正在发生,它们都使用回调

javascript,javascript

var fs=require('fs '),http=require(' http ');http . get({ host : ' www . Baidu.com ' },function(RES){ console . log(' Baidu.com ');}).on('error ',函数(e){ console . log(' get error : ' e . message);});fs.readFile('somefile.txt ',' utf8 ',函数(err,data){ if(err)throw err;console . log(' some file ');});http . get({ host : ' www . duokan.com ' },function(RES){ console . log(' duokan.com ');}).on('error ',函数(e){ console . log(' get error : ' e . message);});fs.readFile('somefile2.txt ',' utf8 ',函数(err,data){ if(err)throw err;console . log(' some file 2 ');});我们能知道哪个操作先返回吗?猜测是从磁盘读取的两个文件先返回,因为不需要进入网络,但是很难说哪个文件先返回,因为我们不知道文件的大小。对于两个主页的获取,脚本需要进入网络,响应时间取决于很多不可预知的事情。在注册的回调被触发之前,Node.js进程不会退出。回调是解决不可预测性的第一种方法,也是处理并发性(或者一次做多件事)的有效方法。以下是我执行的结果

同步和异步代码

首先查看代码,同步(或阻止)代码

javascript,javascript

函数睡眠(毫秒){ var start=new Date()。getTime();而(()新日期()。getTime() -start)毫秒){ } }函数fetchPage(){ console.log('正在获取页面');睡眠(2000年);console.log('从请求页返回的数据');} function FetChapi(){ console . log('提取API ');睡眠(2000年);console.log('从api返回的数据');} FetchPage();fetchApi();当脚本运行时,将调用fetchPage()函数,直到它返回,脚本被阻塞,在fetchPage()函数返回之前,程序不能移动到fetchApi()函数。这叫做阻塞操作。Node.js几乎从不使用这种编码风格,而是异步调用回调。看看下面的代码,

javascript,javascript

var http=require(' http ');function FetchPage(){ console . log('提取页面');http . get({ host : ' www . Baidu.com ',path:'/?delay=2000'},function(res){ console.log('从请求页返回的数据');}).on('错误',函数(e){ console.log('出现错误' e ');});} function FetChapi(){ console . log('提取API ');http . get({ host : ' www . Baidu.com ',path:'/?delay=2000'},function(res){ console.log('从请求api返回的数据');}).on('错误',函数(e){ console.log('出现错误' e ');});} FetchPage();fetchApi();当这个代码被允许时,fetchPage()函数不再等待返回,fetchApi()函数被立即调用。通过使用回调,代码是非阻塞的。一旦被调用,这两个函数将监听来自远程服务器的返回,并相应地触发回调函数。请注意,这些函数的返回顺序不保证,但与网络有关。事件循环

Node.js使用javascript的事件循环来支持它所推崇的异步编程风格。基本上,事件循环允许系统首先保存回调函数,然后在将来事件发生时运行它。这可以是数据库返回的数据,也可以是HTTP请求返回的数据。因为回调函数的执行被推迟到事件生成之后,所以不需要停止执行,控制流可以返回到Node的运行时环境,这样就可以发生其他事情。

Node.js通常被认为是一个网络编程框架,因为它是为了处理网络中数据流的不确定性而设计的。使这种设计成为可能的是事件循环和回调的使用。像他们这样的程序员可以编写异步代码来响应网络或输入输出事件。

要遵循的规则是:函数必须快速返回,函数不能阻塞,长时间运行的操作必须移动到另一个进程。Node.js的不适应性包括处理大量数据或长时间运行计算。Node.js的目标是在网络中推送数据并即时完成。

版权声明:Node.js (3)我的学习路径——node . js函数、回调、同步和异步代码和事件循环是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。