node中什么是同步和异步?
Node.js以其速度而闻名,因为它是非阻塞的。非阻塞意味着一个请求不会等待另一个请求结束(也就是异步的)。异步这一特性使Node.js成为当前吞吐量最大的框架,而Java应用服务器通常阻塞每个绑定到线程的请求,只要没有更多线程可用,服务器会停止接收请求。

node中的同步与异步:
1、什么是同步?
同步:上一步执行完后下一步才能得到执行。
2、什么是异步
异步:将比较复杂的任务制作成任务线程,以任务线程实现,不用等上一句执行完,下一句也可以执行。
异步实现的三种方式:
1、回调函数
异步一定有回调函数,回调函数不一定是异步。
比如回调函数forEach(function(value,index,arr){})是同步的
2、事件
事件源.on('事件名称',回调函数);
var http = require('http');
var server = http.createServer();
server.on('require',function(req,res){...});
server.listen(80,function(){...});3、promise
是ES6中新增的承诺对象,用于对异步的操作进行消息的传递
它有3个状态
Pending 等待中 Resolved 成功 Rejected 失败
状态的转化
Pending --> Resolved pending --> Rejected
用处
可以用于传递异步消息。由于异步的返回结果时间顺序不可控,所以需要使用promise来统一控制输出结果。
var fs = require('fs');
var p1 = new Promise(function(resolve,reject){
fs.readFile('./2-file1.txt',function(err,data){
if(err){
reject('file1读取文件出错了!');
}else{
resolve(data.toString());
}
});
});
var p2 = new Promise(function(resolve,reject){
fs.readFile('./2-file2.txt',function(err,data){
if(err){
reject('file2读取文件出错了!');
}else{
resolve(data.toString());
}
});
});
//利用promise对象的all方法可以实现手动调整输出的顺序,相当于把异步变成同步,但其实还是异步
Promise.all([p1,p2]).then(function(datas){
console.log(datas);
},function(errs){
console.log(errs);
});