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解决上面的回调地狱
Node.js异步函数处理
以此类推,使用promise方法,异步函数就会一步一步完成,跟同步函数一样,从而避免回调地狱。

2 ES7异步函数处理

在函数的前面直接加async,且这个函数返回的是一个promise对象。方法:
Node.js异步函数处理
当执行到return时,便会返回,执行外面的then
Node.js异步函数处理
当执行到throw时,返回并且执行外面的catch
Node.js异步函数处理

await关键字

在async声明的函数中,可以在一个返回Promise对象的语句前面加await,这样这个语句就变成了同步函数