一、回调函数处理异步
将异步代码封装在一个函数中,函数参数为callback,通过此回调函数传递数据
function getdata(callback){
fs.readFile("stu.txt",(error,data)=>{
if(error){
throw error;
}
callback(data.toString());
})
}
//result 即为 getdata 函数中callback的参数 => data.toString()
getdata((result)=>{
console.log(result);
})
二、事件驱动处理异步
使用事件驱动模块,创建事件驱动对象,用对象的on()、emit()方法进行处理
emit("自定义事件名称","传递的数据"); ---事件内部发布广播
on("自定义事件名称",callback) --在外部监听广播
//1.加载事件驱动模块
let events = require("events");
//2.创建事件驱动的对象
let eventemit = new events.EventEmitter();
//3.使用事件驱动处理
fs.readFile("stu.txt",(error,data)=>{
if(error){
throw error;
}
//发布 emit("自定义事件名称","传递的数据");
eventemit.emit("mydata",data);
})
//监听
eventemit.on("mydata",(res)=>{
console.log(res.toString());
})
三、es6 promise对象处理异步
成功状态下将data作为resolve()的参数传出,错误状态下将error作为reject()的参数传出
let promise = new Promise((resolve,reject)=>{
fs.readFile("stu.txt",(error,data)=>{
if(error){
reject(error);
}
//data作为成功状态resolve传递的值
resolve(data);
})
})
promise.then((res)=>{
console.log(res.toString());
},(error)=>{
console.log(error);
})
四、es7 async处理异步
用法类似于promise对象处理
async function getdata(){
try{
let obj=await new Promise((resolve,reject)=>{
fs.readFile("stu.txt",(error,data)=>{
if(error){
throw error;
}
resolve(data);
})
})
return obj;
}
catch(e){
throw e;
}
}
getdata().then((res)=>{
console.log(res.toString());
})