异步的三种实现方式:
回调函数
事件
Promise
回调函数
回调函数不一定是异步
var arr = [1,2,3,4,5];
arr.forEach(function(i, v){
console.log(v);
});
但是异步一定是回调函数。
事件
事件源.on('事件名称', 回调函数)
举例:
var http = require('http');
var server = http.createServer();
server.on('request', function(req, res){
res.write('<h1>You are accessing Node.js server.</h1>');
});
server.listen(80, function(){
console.log('Server is on run.');
});
Promise
承诺对象。用于传递异步操作的消息。它代表了某个未来才知道结果的事件(通常是一个异步事件),并且这个事件提供了一个统一的API,可供进一步处理。
特点:
状态不受外界影响。有三种状态,Pending(进行中),Resolved(已完成,又称Fulfilled)和Rejected(已失败)。这三种状态只能从一个转到另外一个。
Pending -> Resolved
Pending -> Rejected
用于解决异步返回消息的消息传递。
由于异步的返回结果,时间,顺序不可控,所以需要使用Promise来统一控制输出结果。
var fs = require('fs');
var p1 = new Promise(function(resolve, reject){
fs.readFile('./file.txt', function(err, data){
if(err){
console.log('No data.');
}else{
resolve(data.toString());
}
})
});
p1.then(function(data){
console.log(data);
}, function(err){
console.log(err);
});
Promise实现异步消息传递
var p1 = new Promise(function(resolve, reject){
fs.readFile('./file1.txt', function(err, data){
if(err){
console.log('No data.');
}else{
resolve(data.toString());
}
})
});
var p2 = new Promise(function(resolve, reject){
fs.readFile('./file2.txt', function(err, data){
if(err){
console.log('No data.');
}else{
resolve(data.toString());
}
})
});
Promise.all([p1, p2]).then(function(data)){
console.log(data);
});
网友评论