await原理 js_「速圍」Node.js V14.3.0 發布支持頂級 Await 和 REPL 增強功能

b2871beca5f7fa7b44c9eb758686121f.png

本周,Nodejs v14.3.0 發布。這個版本包括添加頂級 Await、REPL 增強等功能。

REPL 增強

通過自動補全改進對 REPL 的預覽支持,例如,下圖中當輸入 process.ver 之后,不需要輸入剩下的實際內容,它幫我們生成了自動補全的輸入預覽。

49397b34d48da5d2eb93a54797409975.png

頂級 Await 支持

不再需要更多的 "async await, async await..." 支持在異步函數之外使用 await 關鍵字。

REPL 環境下應用

在 REPL 環境下做了一個測試,似乎并沒有正常工作,得到了一些錯誤,這是為什么呢?

eee2ac39c45a35d380e87d51f11ec673.png

根據規范,僅支持在 ES Modules 模塊中可用,參考 tc39/proposal-top-level-awai

我們不能提供 “--input-type=module” 這樣的標志到 REPL 環境, 這一次在 node 后加上標志 --experimental-repl-await 看以下示例,現在它可以正常工作了。

b64d0f715f0756e513b3fb1a7f055bb0.png

ES Modules 下應用

Nodejs 在版本 v13.2.0 取消了標記 --experimental-module 可以直接使用 ES Modules。

一種使用方式是文件后綴名使用 .mjs,另一種使用方式是還使用原來的 .js 文件,但是要設置 package.json 的 type=module,詳情可以去官網查看 nodejs.org/api/esm.html

1. 創建 index.mjs

以下示例中我們使用 setTimeout 模擬了一個 sleep 函數,在指定的延遲時間下打印輸出。

const?sleep?=?(millisecond,?value)?=>?{??return?new?Promise(resolve?=>?setTimeout(()?=>?resolve(value),?millisecond));};const?val1?=?await?sleep(1000,?'Output?hello?after?1?second.');console.log(val1);const?val2?=?await?sleep(2000,?'Output?Nodejs?after?1?second.');console.log(val2);

2. 運行 index.mjs

直接這樣執行,仍然會得到一個錯誤,但是看最新發布的 v14.3.0 說明,也沒有說明要提供什么標志,這一點產生了困惑。

Support for Top-Level Await

It's now possible to use the await keyword outside of async functions.

$?node?index.mjs???file:///index.mjs:5const?val1?=?await?sleep(1000,?'Output?hello?after?1?second.');?????????????^^^^^SyntaxError:?Unexpected?reserved?word

在 Github issues Top-level await throws SyntaxError 上發現了一個同樣的問題,解釋了這個原因,在當前版本 v14.3.0 中運行時我們仍需要加上如下兩個標志:

--experimental_top_level_await?or?--harmony_top_level_await

3. 再次運行 index.mjs

這一次運行結果是我們的期望值。

$?node?--experimental_top_level_await?index.mjsOutput?hello?after?1?second.Output?Nodejs?after?1?second.

Top-level await 的用途

上面介紹了 Top-level await 該如何使用,這里說下它的用途,個人認為一個比較有用的是我們可以在文件的頭部做一些資源的初始化。

創建 initialize-mongo-instance.mjs

下面定義了一個初始化 MongoDB 實例的方法 initializeMongoInstance()

//?initialize-mongo-instance.mjsimport?mongodb?from?'mongodb';const?dbConnectionUrl?=?'mongodb+srv://:@cluster0-on1ek.mongodb.net/test?retryWrites=true&w=majority';const?{?MongoClient?}?=?mongodb;export?default?function?initializeMongoInstance?(dbName,?dbCollectionName)?{??return?MongoClient.connect(dbConnectionUrl,?{?useUnifiedTopology:?true?})????.then(dbInstance?=>?{??????const?dbObject?=?dbInstance.db(dbName);??????const?dbCollection?=?dbObject.collection(dbCollectionName);??????console.log("[MongoDB?connection]?SUCCESS");??????return?dbCollection;????}).catch(err?=>?{??????console.log(`[MongoDB?connection]?ERROR:?${err}`);??????throw?err;????});}

index.mjs

例如,index.mjs 為我的啟動文件,在啟動時需要初始化上面定義的 initializeMongoInstance 方法,如果是之前只能寫在一個 async 聲明的異步函數中,現在有了 Top-level await 支持,可以直接像如下方式來寫:

import?initializeMongoInstance?from?'./initialize-mongo-instance.mjs';const?testCollection?=?await?initializeMongoInstance('dbName',?'test');

Reference

  • nodejs.org/en/blog/release/v14.3.0/
  • github.com/tc39/proposal-top-level-await

推薦JavaScript經典實例學習資料文章

《深入細品瀏覽器原理「流程圖」》

《JavaScript 已進入第三個時代,未來將何去何從?》

《前端上傳前預覽文件 image、text、json、video、audio「實踐」》

《深入細品 EventLoop 和瀏覽器渲染、幀動畫、空閑回調的關系》

《推薦13個有用的JavaScript數組技巧「值得收藏」》

《前端必備基礎知識:window.location 詳解》

《不要再依賴CommonJS了》

《犀牛書作者:最該忘記的JavaScript特性》

《36個工作中常用的JavaScript函數片段「值得收藏」》

《Node + H5 實現大文件分片上傳、斷點續傳》

《一文了解文件上傳全過程(1.8w字深度解析)「前端進階必備」》

《【實踐總結】關于小程序掙脫枷鎖實現批量上傳》

《手把手教你前端的各種文件上傳攻略和大文件斷點續傳》

《字節跳動面試官:請你實現一個大文件上傳和斷點續傳》

《談談前端關于文件上傳下載那些事【實踐】》

《手把手教你如何編寫一個前端圖片壓縮、方向糾正、預覽、上傳插件》

《最全的 JavaScript 模塊化方案和工具》

《「前端進階」JS中的內存管理》

《JavaScript正則深入以及10個非常有意思的正則實戰》

《前端面試者經常忽視的一道JavaScript 面試題》

《一行JS代碼實現一個簡單的模板字符串替換「實踐」》

《JS代碼是如何被壓縮的「前端高級進階」》

《前端開發規范:命名規范、html規范、css規范、js規范》

《【規范篇】前端團隊代碼規范最佳實踐》

《100個原生JavaScript代碼片段知識點詳細匯總【實踐】》

《關于前端174道 JavaScript知識點匯總(一)》

《關于前端174道 JavaScript知識點匯總(二)》

《關于前端174道 JavaScript知識點匯總(三)》

《幾個非常有意思的javascript知識點總結【實踐】》

《都2020年了,你還不會JavaScript 裝飾器?》

《JavaScript實現圖片合成下載》

《70個JavaScript知識點詳細總結(上)【實踐】》

《70個JavaScript知識點詳細總結(下)【實踐】》

《開源了一個 JavaScript 版敏感詞過濾庫》

《送你 43 道 JavaScript 面試題》

《3個很棒的小眾JavaScript庫,你值得擁有》

《手把手教你深入鞏固JavaScript知識體系【思維導圖】》

《推薦7個很棒的JavaScript產品步驟引導庫》

《Echa哥教你徹底弄懂 JavaScript 執行機制》

《一個合格的中級前端工程師需要掌握的 28 個 JavaScript 技巧》

《深入解析高頻項目中運用到的知識點匯總【JS篇】》

《JavaScript 工具函數大全【新】》

《從JavaScript中看設計模式(總結)》

《身份證號碼的正則表達式及驗證詳解(JavaScript,Regex)》

《瀏覽器中實現JavaScript計時器的4種創新方式》

《Three.js 動效方案》

《手把手教你常用的59個JS類方法》

《127個常用的JS代碼片段,每段代碼花30秒就能看懂-【上】》

《深入淺出講解 js 深拷貝 vs 淺拷貝》

《手把手教你JS開發H5游戲【消滅星星】》

《深入淺出講解JS中this/apply/call/bind巧妙用法【實踐】》

《手把手教你全方位解讀JS中this真正含義【實踐】》

《書到用時方恨少,一大波JS開發工具函數來了》

《干貨滿滿!如何優雅簡潔地實現時鐘翻牌器(支持JS/Vue/React)》

《手把手教你JS 異步編程六種方案【實踐】》

《讓你減少加班的15條高效JS技巧知識點匯總【實踐】》

《手把手教你JS開發H5游戲【黃金礦工】》

《手把手教你JS實現監控瀏覽器上下左右滾動》

《JS 經典實例知識點整理匯總【實踐】》

《2.6萬字JS干貨分享,帶你領略前端魅力【基礎篇】》

《2.6萬字JS干貨分享,帶你領略前端魅力【實踐篇】》

《簡單幾步讓你的 JS 寫得更漂亮》

《恭喜你獲得治療JS this的詳細藥方》

《談談前端關于文件上傳下載那些事【實踐】》

《面試中教你繞過關于 JavaScript 作用域的 5 個坑》

《Jquery插件(常用的插件庫)》

《【JS】如何防止重復發送ajax請求》

《JavaScript+Canvas實現自定義畫板》

《Continuation 在 JS 中的應用「前端篇」》

作者:五月君 Nodejs技術棧

轉發鏈接:https://mp.weixin.qq.com/s/tNjbpD3paVKxHmo5bq5QIw

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532247.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532247.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532247.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在linux安裝requests庫命令,在Linux--Ubuntu18.04環境下安裝requests庫

之前在服務器上裝過requests庫,但是記憶中花了好大的力氣才成功,現在因為一次意外,服務器重裝系統,現在這些亂七八糟的庫又要重裝一遍,與上次不同的是,這次我裝一遍就成功了。現在分享一下成功的經歷。Pyth…

linux輸入ls后不顯示_零基礎學習之Linux基礎命令小結

安裝完重啟后,沒有像sery所說在圖形界面崩潰了,由于我沒有安裝X-WINDOWS而是直接進入了文本界面。如果你想做linux管理的話,最好在文本界面下工作,這樣會適應如下圖:第一行顯示的是我們所安裝的linux是Red Hat 企業4第二行顯示的是…

redhat enterprise linux 哪個版本好,Red Hat Enterprise Linux 版本顯示中(Santiago)是啥意思?...

樓主的邏輯還有問題。1、linux跟windows都是一種操作系統,但是它用的分區格式是ext3的,ntfs和fat都不合適。安裝過程中你可以自己選擇刪除現有分區創建新分區,但如果你不了解,很可能把所有的分區都清了。2、redhat分區多大合適看你…

.gitignore文件_【第1739期】為Git倉庫里的.idea文件夾正名

前言.idea該不該提交到代碼倉庫中呢?你的意見呢?今日早讀文章由《Flask Web開發》作者李輝分享。正文從這開始~~在網絡上,我曾多次看到人們對于Git倉庫中的.idea文件夾的偏見。最近的一次是在某個博客中技術專家對于志…

監控linux時間不對,shell 計算故障時間 配合web監控

#!/bin/bash#checkfail.log 為SHELL監控網站時間存放的日志文件 https://blog.51cto.com/junhai/2437965fail_time(){starttimetail -n 1000 checkfail.log |grep "$url"|grep "第1次"|tail -n 3|head -n 1|awk {print $1, $2} #取網站掛掉的時間endtimet…

linux redis清空數據恢復,Redis數據恢復--誤刪數據后一次嚇尿的經歷

1、起因,一個flushdb命令因為誤操作,輸入了一個flushdb命令,導到redis里0號庫里的數據全部清空,OMG,這里有不少重要信息,如果被領導知道,必開除2、appendonly留有生機仔細想想,當時數…

c語言 枚舉類型 uint32_淺談C語言枚舉類型 | 附自創用法分享

經濟學家說過,路邊是不會有100元的;但如果有,你還是要撿起來。同理,在貌似萬物免費的網絡時代,你是很難找到有針對性的好資料;但是如果有,希望你能認真學習吸收。比如筆者今天寫的這一篇一今天這…

linux在bin下加入ssh,移植?ssh?到開發板

2》編譯/home/arm下新建目錄sshwork,并且將源碼復制到該目錄下mkdir /home/arm/sshworkcp zlib-1.2.3.tar.gz openssl-0.9.8d.tar.gz openssh-4.6p1.tar.gz/home/arm/sshwork/home/arm/sshwork下新建目錄lib,用來保存生成的庫文件。mkdir /home/arm/sshw…

java pdf增刪改查_如何利用Java代碼操作索引庫?

今天是劉小愛自學Java的第161天。感謝你的觀看,謝謝你。學習計劃安排如下:學了幾天的Elasticserch,但都是它本身的知識點,如何通過Java語言去操作它呢?這就好比以前學數據庫,在數據庫工具中通過sql語句也能…

linux shell 第幾行,Linux shell 獲得字符串所在行數及位置

shell 獲得字符串所在行數及位置01 獲取字符串所在的行數方式一:用grep -n[rootroot]# cat testapplebitcreatedelectexeflowgood[rootroot]# cat test | grep -n exe5:exe[rootroot]# cat test | grep -n exe | awk -F ":" {print $1}5方式二&#xff1a…

sublime text3 怎么配置、運行python_SublimeText3按ctrl+b執行python無反應

最后更新時間:2017-09-14 現象: 在Sublime中打開.py文件,按”ctrlb”執行時無反應。點擊工具->編譯系統中已經有且識別到Python,但執行”run(ctrlshiftb)”時無反應,Sublime左下角提示”No B…

linux 火鍋平臺,“定制版火鍋”來襲,持續創新才能永葆活力

原標題:“定制版火鍋”來襲,持續創新才能永葆活力5月1日,重慶涪陵紅酒小鎮的一家轉轉火鍋店,推出“五一”定制版火鍋免費請游客品嘗。廣西的螺螄粉、貴州的折耳根、湖南臭豆腐、福建烏龍茶、重慶榨菜、河南胡辣湯、陜西老陳醋、海…

internetreadfile讀取數據長度為0_YOLOV3的TensorFlow2.0實現,支持在自己的數據集上訓練...

GitHub鏈接:calmisential/YOLOv3_TensorFlow2?github.com我主要參考了yolov3的一個keras實現版本:qqwweee/keras-yolo3?github.com目前支持在PASCAL VOC 2012數據集上訓練和自定義數據集上訓練,具體的訓練過程可參考項目倉庫中的README文檔…

c語言用鏈表對學生成績排序,學生成績排序和平均分計算利用c語言鏈表的創建插入刪除.doc...

#define NULL 0#define LEN sizeof(struct student)struct student{long num;float score;struct student *next;};int n;struct student *creat(void)//創建鏈表{struct student *head;struct student *p1,*p2;n0;p1p2(struct student*)malloc(LEN);scanf("%ld,%f",…

深井軟巖巷道群支護技術與應用_深井軟巖巷道深淺孔帷幕注漿技術

一、成果內容1.基本原理對失修巷道進行刷擴、支護,滿足使用斷面后進行幫頂噴漿、底板整平,先底板注漿,然后幫、頂注漿。錨架充支護巷道直接底板整平后,先底板后幫、頂注漿。通過全斷面深淺孔聯合注水泥漿進行巷道加固,…

店鋪咨詢系統c語言,課內資源

1 題目介紹1.1 問題描述出于不同目的的旅客對交通工具和交通路徑有不同的要求。例如,因公出差的旅客希望在旅途中的時間盡可能短,出門旅游的游客則期望旅費盡可能省,而老年旅客則要求中轉次數最少。編制一個交通咨詢系統程序,為旅客提供最優決策的交通咨詢。1.2 需求分析提供對…

f分布表完整圖_【教育統計答疑】如何理解正態分布、均值分布、^2分布、t分布和F分布...

許多教育統計的初學者都表示這幾個分布感到學起來非常吃力,結合最近上課的體會以及答疑的情況,覺得很有必要在這里簡單地對這部分內容進行澄清和梳理,以助理解。首先,“為什么要學習這幾個分布”可能是許多人糾結的問題&#xff0…

c語言第一章考試題及答案,C語言考試題庫及答案整理版.doc

C語言考試題庫及答案整理版.docC語言理論上機考試選擇題部分(共200題)1、下面程序的輸出是___D______#includevoid main(){ int k11;printf("k%d,k%o,k%x\n",k,k,k);}A) k11,k12,k11 B) k11,k13,k13C) k11,k013,k0xb D) k11,k13,kb2、在下列選項中,不正確的賦值語句是…

python每天定時9點執行_python每天定時運行某程序代碼

思路:利用time函數返回的時間字符串與指定時間字符串做比較,相等的時候執行對應的操作。不知道大家的思路是什么,感覺這樣比較耗CPU。。。。 此處設置為15:30:10 輸出相應內容,需要執行什么,就修改什么。 import time …

新穎的c語言題目,新穎版c語言經典習題100例(全面面)

新穎版c語言經典習題100例(全面面) (66頁)本資源提供全文預覽,點擊全文預覽即可全文預覽,如果喜歡文檔就下載吧,查找使用更方便哦!19.90 積分實用文檔C語言習題100例(最新整理版)習題目錄:(按住Ctrl點擊可以快速跳轉到…