簡體   English   中英

何時使用 ES2017 內置的“異步”或導入“npm i async”

[英]When to use 'async' built-in for ES2017 or import 'npm i async'

我最近了解到 ES2017 中內置了 async/await,但我已經做了幾個項目,我需要 package異步才能使用 async/await。

有沒有一種簡單的方法來判斷我何時可以正常訪問異步或何時需要導入它? 我是否需要使用 npm package? 如果現在語言中內置了完全相同的功能,那么異步 package(目前每周顯示 47,469,002 次下載)的目的是什么?

對於需要異步的示例項目,請隨意查看 MDN 上的Local-Library MongoDB/Express/Node 教程項目。

由於這是一個 Express 應用程序(就像我自己的幾個應用程序一樣),這與 ExpressJS 有什么關系嗎?

我環顧四周試圖找到這些答案,但空手而歸。 任何理解這一點的幫助表示贊賞。

NPM 上的async庫提供了許多用於管理異步操作的實用函數。 這與允許您將await與 promise 一起使用的語言中的async關鍵字非常不同。 這些就像貓和狗。 它們都與異步編程有關,但除此之外,它們根本不是一回事。

例如,假設您需要向特定主機發出 1000 個單獨的請求,但由於各種原因(內存消耗、主機的速率限制等),您對正在運行的目標主機的請求不能超過 5 個在任何給定時間。 因此,您想啟動 5 個請求,然后每次完成一個請求,您將啟動另一個請求,直到最終完成所有 1000 個請求。

ES7 中的async關鍵字也許可以用在一些自定義代碼中來實現我上面描述的算法,但它本身並沒有給你那個解決方案。

而來自 NPM 的async庫在其工具包中有一個特定的 function 用於執行我所描述的操作。 它稱為parallelLimit() ,它可以讓您准確指定一次要並行的操作數(僅此而已)。 事實上, async庫包含用於管理異步控制流的各種實用函數,您可以在此處查看它們的完整列表: https://caolan.github.io/async/v3/docs.html#parallelLimit

現在我們在語言中有了async關鍵字,其中一些算法不再需要,因為用純 ES7 編寫它們非常容易。 例如,如果您想一次遍歷一個數組,對每個項目調用異步 function,您可以只使用for循環和await ,所有這些都在async function 中。

async function run() {
    for (let x of myArray) {
         await doSomeAsyncOperation(x);
    }
}

在我們在 ES7 中使用asyncawait之前,您將不得不編寫一些自定義代碼來執行此異步、序列化迭代,或者您將使用來自諸如async庫之類的庫中的預構建 function。

概括

回顧一下, async庫包含許多用於管理異步操作的實用程序函數。 由於 ES7 中asyncawait提供的控制流選項,其中一些不再需要,即使存在asyncawait ,有些仍然有用/有用。

僅供參考, async庫最初是在 Javascript 中的 promise 和async/await之前開發的,它處理使用普通回調來表示完成或錯誤並提供管理它們的實用程序的老式異步操作。 Promise 和async/await已經取代了對async庫中某些功能的需求,但不是全部。

何時使用 ES2017 內置的“異步”或導入“npm i async”

使用內置的 ES7 async/await直接簡單的解決了你需要解決的異步控制流問題。 當您無法僅使用async/await輕松解決問題並且async庫包含一個預構建的 function 可以直接簡單地解決您的問題時,請使用異步庫中的 function。

因此, async庫只是 NPM 上數十萬個庫之一。 當它包含比已經內置在語言中更好的幫助您解決工作的內容時,您可以使用它,與何時使用 NPM 中的任何其他模塊的邏輯相同。

作為 ES2017 一部分的 aysnc/await 通過避免 promise 鏈來實現更簡潔的風格。 請參閱 mdn 中提到的以下示例。 您避免 promise 鏈,然后捕獲並具有異步行為https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

您提到的異步庫更像是一個實用程序(它們主要設計用於節點 js),它采用回調數組,執行並包裝它們並為您提供 promise。 Iy 還為您提供更多功能,例如,如果您想要並行、串行、鏈接回調調用回調,則通過常見的成功/錯誤處理來幫助跟蹤這些

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM