欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

node異步使用await和不用await的區(qū)別實(shí)例分析

 更新時間:2023年06月08日 09:54:10   作者:foreverling_ling  
這篇文章主要介紹了node異步使用await和不用await的區(qū)別,結(jié)合實(shí)例形式分析了node.js異步使用await和不用await的實(shí)例中,同步與異步執(zhí)行的區(qū)別,需要的朋友可以參考下

最近在用node寫項(xiàng)目。新版node異步用的是async/await這兩個關(guān)鍵字。我們都知道,一般這兩個關(guān)鍵字要成對出現(xiàn)。但是,筆者發(fā)現(xiàn),如果不需要等待返回值的話,await可以不加。那么await加和不加有什么區(qū)別呢?百度以及google了大量資料,結(jié)合評論,最終在實(shí)踐中弄明白了。下面直接上例子。

不加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)
? ? })
? }

運(yùn)行test函數(shù)以后,命令行迅速依次打印了如下結(jié)果

我們看到,沒有加await,異步函數(shù)A,B順序執(zhí)行,由于A運(yùn)行時間較長,所以B先執(zhí)行完成,整個過程沒有阻塞。

加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)
? ? })
? }

運(yùn)行結(jié)果如下 :

由于加了await,所以要等待異步事件A先完成,然后才會進(jìn)行事件B。也就是await不會阻塞同步事件的運(yùn)行,但是異步卻是一個一個執(zhí)行的,其中一個阻塞,下一個異步事件就無法繼續(xù)。

由于node.js異步事件執(zhí)行機(jī)制,各個事件的執(zhí)行順序帶有不確定性。因此,對于需要對執(zhí)行順序有要求的事件就需要謹(jǐn)慎使用同步與異步事件。

相關(guān)文章

  • 初學(xué)者如何快速搭建Express開發(fā)系統(tǒng)步驟詳解

    初學(xué)者如何快速搭建Express開發(fā)系統(tǒng)步驟詳解

    這篇文章主要介紹了初學(xué)者如何快速搭建Express開發(fā)系統(tǒng),結(jié)合實(shí)例形式詳細(xì)分析了express框架搭建的具體步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2023-05-05
  • 使用NVM實(shí)現(xiàn)不同nodejs版本的自由切換

    使用NVM實(shí)現(xiàn)不同nodejs版本的自由切換

    在工作中,我們可能需要同時進(jìn)行多個不同NodeJS版本的項(xiàng)目開發(fā),這種情況下,對于維護(hù)多個版本的node將會是一件非常麻煩的事情,NVM就是為解決這個問題而產(chǎn)生的,本文給出了下載、安裝及使用方法,需要的朋友可以參考下
    2024-02-02
  • nodejs中模塊定義實(shí)例詳解

    nodejs中模塊定義實(shí)例詳解

    這篇文章主要介紹了nodejs中模塊定義方法,結(jié)合實(shí)例形式分析了nodejs模塊的原理、常見模塊及相應(yīng)的定義方法,需要的朋友可以參考下
    2017-03-03
  • nvm查看所有node包命令失效原因解決方案

    nvm查看所有node包命令失效原因解決方案

    使用nvm時可能會遇到超時問題,這是由于node的包存放在國外服務(wù)器上,解決方法是在nvm的配置文件中添加鏡像地址,下面就來具體介紹一下步驟,感興趣的可以了解一下
    2024-09-09
  • node.js入門教程

    node.js入門教程

    這篇文章主要介紹了node.js入門教程,講解了node.js在linux和windows下的安裝,模塊的概念,NPM的使用等等,是一篇不錯的nodejs入門文章,需要的朋友可以參考下
    2014-06-06
  • Node.js實(shí)戰(zhàn)之Buffer和Stream模塊系統(tǒng)深入剖析詳解

    Node.js實(shí)戰(zhàn)之Buffer和Stream模塊系統(tǒng)深入剖析詳解

    這篇文章主要介紹了Node.js實(shí)戰(zhàn)之Buffer和Stream模塊系統(tǒng)深入剖析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 解決修復(fù)npm安裝全局模塊權(quán)限的問題

    解決修復(fù)npm安裝全局模塊權(quán)限的問題

    今天小編就為大家分享一篇解決修復(fù)npm安裝全局模塊權(quán)限的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • node靜態(tài)服務(wù)器實(shí)現(xiàn)靜態(tài)讀取文件或文件夾

    node靜態(tài)服務(wù)器實(shí)現(xiàn)靜態(tài)讀取文件或文件夾

    這篇文章主要介紹了node靜態(tài)服務(wù)器實(shí)現(xiàn)靜態(tài)讀取文件或文件夾,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 使用koa2創(chuàng)建web項(xiàng)目的方法步驟

    使用koa2創(chuàng)建web項(xiàng)目的方法步驟

    這篇文章主要介紹了使用koa2創(chuàng)建web項(xiàng)目的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • nodejs微信開發(fā)之授權(quán)登錄+獲取用戶信息

    nodejs微信開發(fā)之授權(quán)登錄+獲取用戶信息

    這篇文章主要介紹了nodejs微信開發(fā)之授權(quán)登錄+獲取用戶信息,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03

最新評論