使用Async,讓你的Node.js程式碼更優雅
Async
Async is a utility module which provides straight-forward, powerful functions for working with asynchronous JavaScript. Although originally designed for use with Node.js and installable via npm install --save async, it can also be used directly in the browser.
在寫Node.js程式碼的時候,由於Node.js的非同步程式設計特性,我們經常會巢狀多個函式,導致程式碼臃腫、維護性差:
func1() { func2() { func3() { func4(){ ... } } } }
Async正是解決了這個問題。
Async官網:
Async例項
async.map(['file1','file2','file3'], fs.stat, function(err, results) { // results is now an array of stats for each file});async.filter(['file1','file2','file3'], function(filePath, callback) { fs.access(filePath, function(err) { callback(null, !err) }); }, function(err, results) { // results now equals an array of the existing files});async.parallel([ function(callback) { ... }, function(callback) { ... } ], function(err, results) { // optional callback});async.series([ function(callback) { ... }, function(callback) { ... } ]);
Async的幾種方式
1.series - 序列執行
series(tasks, callbackopt)
序列執行幾個函式,第一個引數既可以是Array,也可以是Object。
函式1執行完後,不能將引數傳到函式2;故如果需要傳遞引數,不能用series,應用waterfall。
在執行函式過程中,一旦出現錯誤,將中斷;後續的函式將不再執行。
更詳細的資料,請進入官網:
async.series({ one: function(callback){ callback(null, 1); }, two: function(callback){ callback(null, 2); } },function(err, results) { console.log(results); });
2.waterfall - 序列執行,並傳引數
waterfall(tasks, callbackopt)
第一個引數必須是Array,它可以將引數傳遞到下一個函式。
和series函式一樣,在執行函式過程中,一旦出現錯誤,將中斷;後續的函式將不再執行。
更詳細的資料,請進入官網:
async.waterfall([ function(callback) { callback(null, 'one', 'two'); }, function(arg1, arg2, callback) { // arg1 now equals 'one' and arg2 now equals 'two' callback(null, 'three'); }, function(arg1, callback) { // arg1 now equals 'three' callback(null, 'done'); } ], function (err, result) { // result now equals 'done'});
3.parallel - 並行執行
parallel(tasks, callbackopt)
顧名思義,就是各任務同時執行,後面宣告的task不需要等待前面task結束,而是立即執行。
需要注意的是,最後的callback得到的引數,是宣告中的最後一個函式傳入的,而不是最後執行的函式。
更詳細的資料,請進入官網:
async.parallel([ function(callback) { setTimeout(function() { callback(null, 'one'); }, 200); }, function(callback) { setTimeout(function() { callback(null, 'two'); }, 100); } ],// optional callbackfunction(err, results) { // the results array will equal ['one','two'] even though // the second function had a shorter timeout.});
4.parallelLimit - 並行執行,限制數量
parallelLimit(tasks, limit, callbackopt)
parallelLimit函式和parallel類似,只是多了一個引數limit。其作用是隻能同時併發一定數量,而不是無限制併發
參考資料
[1]
[2]
作者:Mike的讀書季
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2730/viewspace-2802666/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一些技巧讓你的 Laravel 程式碼更優雅Laravel
- Go Interface 的優雅使用,讓程式碼更整潔更容易測試Go
- 帶引數的 Python 裝飾器讓你的程式碼更優雅Python
- 使用解構賦值與擴充套件運算子,讓你的程式碼更優雅賦值套件
- 讓你的程式碼更優雅—去掉Xcode工程中某種型別的警告XCode型別
- DSL-讓你的 Ruby 程式碼更加優雅
- 幾個簡單的技巧讓你寫出的vue.js程式碼更優雅Vue.js
- 想讓你的程式碼變得更加優雅嗎?
- 編寫更優雅的 JavaScript 程式碼JavaScript
- 讓你的React表單操作更優雅(formik+yup)ReactORM
- Rize - 一個可以讓你簡單、優雅地使用 puppeteer 的 Node.js 庫Node.js
- Android Annotation-讓你的程式碼和設計更加優雅(一)Android
- 聊一聊Java8 Optional,讓你的程式碼更加優雅Java
- 你的 JS 程式碼本可以更加優雅JS
- 用Assert(斷言)封裝異常,讓程式碼更優雅(附專案原始碼)封裝原始碼
- 優雅的程式碼
- PHPer這樣寫程式碼也許更優雅PHP
- 如何讓git優雅的使用php-cs-fix格式化程式碼GitPHP
- 更優雅的在 mpvue 中使用 canvasVueCanvas
- 使用 Macro 讓你的程式碼更簡潔,更具有可讀性Mac
- 用 Node 抓站(二):Promise 使程式碼更優雅Promise
- 經驗總結 | 重構讓你的程式碼更優美和簡潔
- 全面吃透JAVA Stream流操作,讓程式碼更加的優雅Java
- Android Annotation-讓你的程式碼更加優雅(二)做一個Java詩人(JavaPoet)AndroidJava
- Async:簡潔優雅的非同步之道非同步
- Python 使用 backoff 更優雅的實現輪詢Python
- 更優雅的在 Xunit 中使用依賴注入依賴注入
- java如何讓程式碼變得優雅——自定義註解Java
- Java11正式釋出了,讓你的程式碼更完美?Java
- 如何寫出優雅的程式碼?
- 寫出優雅的js程式碼JS
- 如何優雅的打包前端程式碼前端
- async/await 優雅的錯誤處理方法AI
- Redux 進階 — 優雅的處理 async actionRedux
- Redux 進階 -- 優雅的處理 async actionRedux
- 你見過哪些優雅的 Java 程式碼最佳化技巧?Java
- 基礎問題不簡單 | 怎麼合理使用值物件,讓你的程式碼更清晰、更安全?物件
- 【Android】在Kotlin中更優雅地使用LiveDataAndroidKotlinLiveData