node异步使用await和不用await的区别实例分析
最近在用node写项目。新版node异步用的是async/await这两个关键字。我们都知道,一般这两个关键字要成对出现。但是,笔者发现,如果不需要等待返回值的话,await可以不加。那么await加和不加有什么区别呢?百度以及google了大量资料,结合评论,最终在实践中弄明白了。下面直接上例子。
不加await
async test(ctx,next){
this.doThing().then(console.log('done Thing'))
this.doAnotherThing();
console.log('this way');
}
async doThing() {
this.doA();
this.doB();
}
doAnotherThing() {
console.log('do another thing')
}
async doA() {
return new Promise(resove => {
setTimeout(() => {
console.log('done A')
resove()
}, 1000)
})
}
async doB() {
return new Promise(resove => {
setTimeout(() => {
console.log('done B')
resove()
}, 100)
})
}运行test函数以后,命令行迅速依次打印了如下结果

我们看到,没有加await,异步函数A,B顺序执行,由于A运行时间较长,所以B先执行完成,整个过程没有阻塞。
加await
async test(ctx,next){
this.doThing().then(console.log('done Thing'))
this.doAnotherThing();
console.log('this way');
}
async doThing() {
await this.doA()
await this.doB()
}
doAnotherThing() {
console.log('do another thing')
}
async doA() {
return new Promise(resove => {
setTimeout(() => {
console.log('done A')
resove()
}, 1000)
})
}
async doB() {
return new Promise(resove => {
setTimeout(() => {
console.log('done B')
resove()
}, 100)
})
}运行结果如下 :

由于加了await,所以要等待异步事件A先完成,然后才会进行事件B。也就是await不会阻塞同步事件的运行,但是异步却是一个一个执行的,其中一个阻塞,下一个异步事件就无法继续。
由于node.js异步事件执行机制,各个事件的执行顺序带有不确定性。因此,对于需要对执行顺序有要求的事件就需要谨慎使用同步与异步事件。
相关文章
在Node.js中使用Express实现视频评论的列表展示和删除功能
在现代Web应用中,视频内容和互动功能(如评论)的结合极大地增加了用户的参与度,本文将通过一个具体的例子,展示如何在Node.js环境中使用Express框架来实现视频评论的列表展示和删除功能,需要的朋友可以参考下2024-04-04
Nodejs 构建Cluster集群多线程Worker threads
这篇文章主要为大家介绍了Nodejs 构建Cluster集群多线程Worker threads示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-10-10
用node和express连接mysql实现登录注册的实现代码
本篇文章主要介绍了用node和express连接mysql实现登录注册的实现代码,具有一定的参考价值,有兴趣的可以了解一下2017-07-07


最新评论