node.js作用、回调、同步和异步代码 以及事件循环

一,node.js的作用,

I/O的意义,(I/O是输入/输出的简写,如:键盘敲入文本,输入,屏幕上看到文本显示输出。鼠标移动,在屏幕上看到鼠标的移动。终端的输入,和看到的输出。等等)
 
node.js想解决的问题,(处理输入,输入,高并发 。如 在线游戏中可能会有上百万个游戏者,则有上百万的输入等等)(node.js适合的范畴:当应用程序需要在网络上发送和接收数据时Node.js最为适合。这可能是第三方的API,联网设备或者浏览器与服务器之间的实时通信)
 
并发的意义,(并发这个术语描述的是事情会在同时发生并可能相互交互。Node的事件化的I/O模型让我们无需担心互锁和并发这两个在多线程异步I/O中常见的问题)
 
演示网络I/O

Js代码 

var http = require('http'), urls = ['www.baidu.com','www.10jqka.com.cn','www.duokan.com']; function fetchPage(url){ var start = new Date(); http.get({host:url},function(res){ console.log("Got response from:" + url); console.log("Request took:",new Date() - start, "ms"); }); } for(var i=0; i<urls.length; i++){ fetchPage(urls[i]); }

命名为,node.js
我们在终端里面运行node node.js
输出:

node.js作用、回调、同步和异步代码 以及事件循环

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

1,$("p").hide('slow'); 2,$("p").hide('slow',function(){alert("The paragraph is now hidden")});

回调是可选的,
1就不需要回调
2,是有回调的,当段落隐藏完成后它就会被调用,显示一个alert提示。
 
为了可以看到带与不带回调的代码之间的区别
Js代码 

$("p").hide('slow'); alert("The paragraph is now hidden");//1 $("p").hide('slow',function(){alert("The paragraph is now hidden")});//2

1,是没有回调,,执行顺序是一样但是,我们可以看到p段落还没有隐藏完全,alert就出来
2,是有回调的,执行则是hide完成后在alert
 
 剖析回调
Js代码 

function haveBreakfast(food,drink,callback){ console.log('Having barakfast of' + food + ', '+ drink); if(callback && typeof(callback) === "function"){ callback(); } } haveBreakfast('foast','coffee',function(){ console.log('Finished breakfast. Time to go to work!'); });


输出:

Having barakfast of foast,coffee Finished breakfast. Time to go to work!

这里是创建了一个函数,有三个参数,第三个参数是callback,这个参数必须是个函数。
haveBreakfast函数将所吃的东西记录到控制台中然后调用作为参数传递给它的回调函数。
 
Node.js如何使用回调

node.js中使用filesystem模块从磁盘上读入文件内容的示例
 
Js代码 

var fs = require('fs'); fs.readFile('somefile.txt','utf8',function(err,data){ if(err) throw err; console.log(data); });

结果是:somefile.txt里面的内容。
1,fs(filesystem)模块被请求,以便在脚本中使用
2,讲文件系统上的文件路径作为第一个参数提供给fs.readFile方法
3,第二个参数是utf8,表示文件的编码
4,将回调函数作为第三个参数提供给fs.readFile方法
5,回调函数的第一个参数是err,用于保存在读取文件时返回的错误
6,回调函数的第二参数是打他,用户保存读取文件所返回的数据。
7,一旦文件被读取,回调就会被调用
8,如果err为真,那么就会抛出错误
9,如果err为假,那么来自文件的数据就可以使用
10,在本例中,数据会记录到控制台上。
 
再一个,http模块,http模块使得开发人员可以创建http客户端和服务器。

Js代码 

var http = require('http'); http.get({host:'shapeshed.com'},function(res){ console.log("Got response:" + res.statusCode); }).on('error',function(e){ console.log("Got error:" + e.message); });

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgpzyg.html