1. 什么是同步?
同步:上一行执行完后下一行才能得到执行
2. 什么是异步
异步:将比较复杂的任务制作成任务线程,以任务线程实现,不用等上一句执行完,下一句也可以执行
2.1 异步实现的三种方式
2.1.1 回调函数
异步一定有回调函数,回调函数不一定是异步。
比如回调函数forEach(function(value,index,arr){})
是同步的
2.1.2 事件
事件源.on('事件名称',回调函数);
var http = require('http');
var server = http.createServer();
server.on('require',function(req,res){...});
server.listen(80,function(){...});
2.1.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);
});