Node.js异步编程
同步API:只有当前API执行完成后,才能继续执行下一个API;
异步API:当前API的执行不会阻塞后续代码的执行。编程
区别:同步API能够从返回值中拿到API执行结果,异步不行。promise
在异步API中使用回调函数获取执行结果:
function getMsg(callback) {
setTimeout(function () {
callback({
msg:'ALOHA'
})
},2000)
}异步
getMsg(data => console.log(data))异步编程
区别:执行顺序函数
同步:从上到下依次执行,前面代码会阻塞后面代码的执行。
异步:不会等待API执行完成后再向下执行代码。
ui
Promise
Promise出现的目的是解决Node.js异步编程中回调地域的问题(即嵌套多重函数)。blog
基本使用方法
let promise = new Promise((resolve,reject) =>{get
setTimeout(()=>{回调函数
if(true){同步
resolve({name:'张三'})
}else {
reject('失败了')
}
},2000)
});
promise.then(result=>console.log(result))
.catch(error =>console.log(error));
分离异步API执行和错误分离
获取本地文件夹内容:const fs = require('fs');
let promise = new Promise((resolve,reject) =>{
fs.readFile('./1.txt','utf8',(error,result) =>{
if(error != null){
reject(error)
}else {
resolve(result);
}
})
})
promise.then((result) =>{ //then,执行resolve(result)=执行promise.then
console.log(result)
})
.catch((error) =>{ //链式编程
console.log(error)
})
项目实战
const fs = require('fs');
/* //callbackhellfs.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); }) })})*/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) })