Node的异步API和同步API
一、同步API
代码一行一行从上往下执行
二、异步API
当前代码不会阻塞后续代码执行,解析器遇到异步API会放到异步队列当中,先执行完同步API,再执行异步队列的异步API,但是异步队列的异步API不是按顺序执行的。
三、同步API和异步API的区别
1.同步API可以return值,而异步API不能return
function test(){
return 1
}
let a = test()//1
function test(){
serTimeout(function(){
return 2
},200)
}
let b = test()//undefined,拿不到2
四、回调函数
函数名作为实参传进函数中
写法:
function test(callback){
callback('123')
}
//调用
test(function(a){
console.log(a)//123
})
可以把函数内部的变量作为实参来操作。
1.可以把异步API作为同步API来写。
function test(callback){
serTimeout(function(){
callback(2)
},200)
}
test(function(data){
console.log(data)//2
})
这样就能操作异步API里的变量了,相当于省略异步这一步。
2.回调地狱
fs.readFile('./a.html',(err,res)=>{
fs.readFile('./b.html',(err,res)=>{
fs.readFile('./c.html',(err,res)=>{
fs.readFile('./d.html',(err,res)=>{
})
})
})
})
b文件必须在a文件读完后,再执行,而c文件必须在b文件读取完后再执行。
这就是回调地狱,不断在回调函数里嵌套回调。
解决方案:
1.promise