Node.js异步函数处理
解决回调地狱
什么是回调地狱?
举一个简单的例子吧,
setTimeout(()=>{
//假设这里有1000行代码,接着
setTimeout(()=>{
//假设这里有一千行代码
},2000)
},2000)
以此类推,反复嵌套,由于setTimeout是异步函数,故会一直回调一直回调。从而产生回调地狱
解决方法
1 Promise
我们先学习Promise对象
let promise=new Promise((resolve,reject)=>{
if(true)resolve(‘a’)
else reject(‘b’)
})
此时promise就是一个promise对象,可以调用.then.catch等方法
promise.then(a=>a).catch(b=>b)
在Promise中,调用resolve函数时,就会调用then,调用reject函数时,就会调用catch
我们用promise解决上面的回调地狱
以此类推,使用promise方法,异步函数就会一步一步完成,跟同步函数一样,从而避免回调地狱。
2 ES7异步函数处理
在函数的前面直接加async,且这个函数返回的是一个promise对象。方法:
当执行到return时,便会返回,执行外面的then
当执行到throw时,返回并且执行外面的catch
await关键字
在async声明的函数中,可以在一个返回Promise对象的语句前面加await,这样这个语句就变成了同步函数