09-Node.js学习笔记-异步编程

同步API,异步API

同步API:只有当前API执行完成后,才能继续执行下一个API

```
console.log('before');
console.log('after');
```

异步API:当前API的执行不会阻塞后续代码的执行

```
console.log('before');
setTimeout(function(){
console.log('last')
},2000)
console.log('after');
```

同步API,异步API的区别(获取返回值)

同步API可以从返回值中拿到API执行的结果,但是异步API不可以的

回调函数

自己定义函数让别人去调用

```
function getData(callback){
callback()
}
getData(function(){
console.log('callback函数被调用了')
})
```
```
function getData(callback){
callback('糖糖糖')
}
getData(function(n){
console.log('callback函数被调用了')
console.log(n)
})
```
```
function getMsg(callback){
setTimeout(function(){
callback({
msg:'hello node.js'
})
},2000)
}
getMsg(function(data){
console.log(data)
})
```

同步API,异步API的区别(代码执行顺序)

同步API从上到下依次执行,前面代码会阻塞后面代码的执行

异步API不会等待API执行完成后再向下执行代码

Promise

Promise 出现的目的是解决Node.js异步编程中回调地狱的问题

```
let promise = new Promise((resolve,reject)=>{
setTimeout(()=>{
if(true){
resolve({name:'林一一'})
}else{
reject('失败了')
}
},2000);
});
promise.then(result=>console.log(result);//{name:'林一一'})
.catch(error=>console.log(error);//失败了)
```
```
//回调地狱
const fs = require('fs');
fs.readFile('./1.txt','utf8',(err,result1)=>{
console.log(result1)
fs.readFile('./2.txt','utf8',(err,result2)=>{
console.log(result2)
fs.readFile('./3.txt','utf8',(err,result3)=>{
console.log(result3)
})
})

})

//promise解决回调地狱

const fs = require('fs');

function p1(){

return new Promise((resolve,reject)=>{

fs.readFile('./1.txt','utf8',(err,result)=>{

resolve(result);

})

})

}

function p2(){

return new Promise((resolve,reject)=>{

fs.readFile('./2.txt','utf8',(err,result)=>{

resolve(result);

})

})

}

function p3(){

return new Promise((resolve,reject)=>{

fs.readFile('./3.txt','utf8',(err,result)=>{

resolve(result);

})

})

}

p1().then((r1)=>{

console.log(r1)

return p2()

}).then((r2)=>{

console.log(r2)

return p3()

}).then((r3)=>{

console.log(r3)

})

const fs = require('fs');

let promise = new Promise((resolve,reject)=>{

fs.readFile('./100.txt','utf8',(err,result)=>{

if(err !=null){

reject(err);

}else{

resolve(result);

}

})

})

promise.then((result)=>{

console.log(result);

}).catch((err)=>{

console.log(err)

})

上一篇:BoTNet论文解析


下一篇:ajax请求的时候后台有三个服务器地址