回调函数
//一次读取 a.txt、b.txt、c.txt、文件
const { fstat } = require('fs')
const fs = require('fs')
fs.readFile('./index.js','utf-8',(error,result1)=>{
if(error==null){
fs.readFile('./main.js','utf-8',(error,result2)=>{
if(error==null){
fs.readFile('./c.txt','utf-8',(error,result3)=>{
if(error==null){
console.log(result1,'|||',result2,'|||',result3)
}
})
}
})
}
})
//回调地狱,代码可维护性太差
promise
用法:let promise = new Promise((resove,reject)=>{
setTimeout(()=>{
},2000)
})
版本一:
const fs = require('fs');
function f1(){
return new Promise((resolve, reject) =>{
fs.readFile('1.txt','utf-8',(err,result)=>{
if(err==null){
resolve(result)
}else {
reject(err)
}
})
} )
}
function f2(){
return new Promise((resolve, reject) =>{
fs.readFile('2.txt','utf-8',(err,result)=>{
if(err==null){
resolve(result)
}else {
reject(err)
}
})
} )
}
function f3(){
return new Promise((resolve, reject) =>{
fs.readFile('3.txt','utf-8',(err,result)=>{
if(err==null){
resolve(result)
}else {
reject(err)
}
})
} )
}
f1().then(result=>{
console.log(result)
return f2()
}).then(result=>{
console.log(result)
return f3()
}).then(result=>{
console.log(result)
})
版本二:异步函数ES7语法
async :
1.在普通函数定义前面加 async关键字,变为异步函数
2.异步函数默认的返回值是promise对象
async function foo(name){
if(name=='xiaosan'){
throw '小三必须打'
}
return 123;
}
foo('xiaosan').then((data)=>{
console.log(data)
}).catch((err)=>{
console.log(err)
})
//throw 抛出异常
//reutrn 正常执行
版本三: async , await
await:
1.只能在异步函数中
2.await promise 可以暂停异步函数,等待promise对象返回结果后在向下执行函数
async function f1() {
return 'f1'
}
async function f2() {
return 'f2'
}
async function f3() {
return 'f3'
}
async function run(){
let res1 = await f1()
let res2 = await f2()
let res3 = await f3()
}
run()