javascript --- 異步函數的順序進行

假設我們希望某一組異步函數能一次進行,在不使用的任何工具的情況下,可能會編寫出類似下面的代碼:

funcs[0](function() {funcs[1](function() {funcs[2](onComplete);})
});// 注:以上代碼運行會出現的一些不方便:
// 1.回調太深,不利于閱讀..(100層嵌套...);
// 2.不能使用循環,只能一個一個手動的敲...

幸好我們還有async.series和async.waterfall。這兩個方法均接受一組函數(即任務列表)作為參數并按順序運行它們.

// async.series
var async = require('async'):
var start = new Date;async.series([function(callback) {setTimeout(callback, 100);},function(callback) {setTimeout(callback, 200);},function(callback) {setTimeout(callback, 300);}
],function(err, results){console.log('Completed in' + (new Date - start) + 'ms');
});// 注:以上函數會在運行后600毫秒之后(大于600毫秒)結束

下面再介紹一種并行運行的異步函數

// async.parallel
var async = require('async');
var start = new Date;
async.parallel([function(callback) { setTimeout(callback, 100); },function(callback) { setTimeout(callback, 300); },function(callback) { setTimeout(callback, 200); }
], function(err, results) {console.log('Completed in ' + (new Date - start) + 'ms');
});
//  注:約大于300毫秒后結束..

參考《JavaScript異步編程》— 設計快速響應的網絡應用 P76~P77

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

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

相關文章

2021前端面試題

基礎知識與素養 JS基本功訓練與思考 程序設計的滲透與應用 業務技巧的積累與訓練 生產力轉換 項目的組織架構 轉換專業人才的全面生產力 什么樣的技術水平決定了你應該學習什么樣的知識與技術,什么樣的知識與技術水平決定了你到什么樣的公司,到什么樣的公…

JS的自定義事件(觀察者模式)

1      var Event {2 on: function (eventName, callback) {3 console.log("eventName:"eventName)4 if (!this.handles) {5 Object.defineProperty(this, "handles", {6 …

glog日志庫使用筆記

日志能方便地診斷程序原因、統計程序運行數據,是大型軟件系統必不可少的組件之一。glog 是google的開源日志系統,相比較log4系列的日志系統,它更加輕巧靈活。 在Github上下載glog,解壓后用CMake生成VS2017工程(默認生成…

javascript --- 異步工作流的動態排隊技術

很多情況下,使用async.series和async.paralle存在一個明顯的問題,即: 1.其任務隊列是靜態的,在其調用前,一定要明確任務隊列的數量,一旦明確了任務隊列的數量,就不能改變. 2.倘如要同時并發讀取上千個文件,使用async.paralle明顯不可能(各線程搶資源,根本不夠用),使用async.ser…

java中的內部類總結

內部類不是很好理解,但說白了其實也就是一個類中還包含著另外一個類 如同一個人是由大腦、肢體、器官等身體結果組成,而內部類相當于其中的某個器官之一,例如心臟:它也有自己的屬性和行為(血液、跳動) 顯然…

elementPlus關閉彈窗,頁面原先滾動條消失

一開始以為是彈窗內容超過一屏引起,改為一屏內也不能解決。 打開控制臺,發現彈窗后自動給body標簽加上了類el-popup-parent–hidden,關閉后也沒去除,因此手動刪除該類。 document.getElementsByTagName(body)[0].className ;

在Windows下如何創建虛擬環境(默認情況下)

很多小伙伴平時在使用Python的時候,有的項目需要使用Python2來進行開發,有的項目則是需要Python3來進行開發。當不清楚怎么分開環境的時候,此時兩個環境開始打架,彼此傻傻分不清楚。虛擬環境作為隔離的利器應運而生,其…

javascript --- 隱藏內部實現(最小暴露原則)

看下面的一個例子: function doSomething(a) {b a doSomethingElse( a * 2 );console.log( b * 3 ); }function doSomethingElse(a) {return a - 1; }var b;doSomething( 2 ) ; // 15上述代碼中的doSomethingElse實際上應該是doSomething的"私有"部分,根據最小暴露…

selenium python 入門-元素定位

環境搭建 安裝教程 http://www.testclass.net/selenium_python/install-selenium/ chrome瀏覽器 還需要下載chrome driver 把下載的chromedriver .exe放到chrome安裝目錄下的Application目錄下和 python所在的安裝目錄下,比如我的目錄是C:\Program Files (x86)\Goog…

ES5程序設計轉ES6 筆記

課程鏈接 1. 立即執行函數 特點:執行結束,立即銷毀;獨立作用域執行符號()只能跟在表達式后面,不能放在函數聲明后分號可以寫在前面/后面document為傳入實參,doc為形參 ;(function(doc){...co…

DPDK helloworld 源碼閱讀

在 DPDK Programmers Guides 中的 EAL 一篇中有一個圖可以很清晰地看到一個DPDK的應用程序的大致執行思路: 初始化檢查CPU支持、微架構配置等完成后,執行main()函數。 第一步是 rte_eal_init(),核心初始化和啟動。其中線程使用的是pthread庫&…

javascript --- 作用域和閉包

執行環境: // 定義了變量或函數有權訪問的其他數據,決定了它們各自的行為 // 每個執行環境都有一個變量對象與之對應,執行環境中所定義的所有變量和函數都保存在變量對象中 // 某個執行環境中的所有代碼執行完畢后,該執行環境被銷毀,保存在其中的所有變量和函數定義也隨之銷毀…

異步下載圓形進度條顯示進度

圓形進度條參考鏈接即可:使用css3實現圓形進度條 需求點擊下載后遮罩層顯示下載進度: 1.圓形進度條參考以上鏈接,有點小瑕疵,可更改定位距離實現重合。 2.遮罩層: .lbOverlay{display: none;position: fixed;left: 0;…

javascript基本功

隱式類型轉換 var a {_default: 0,toString: function () {return a._default} } if (a 1 && a 2 && a 3) {console.log(解) } 訪問一個變量的時候進行攔截 var _default 0 Object.defineProperty(window, a, {get() {return _default} }) if (a 1 &am…

深信服筆試,抓兔子

*問題描述:抓兔子n個排成一排的洞,編號為1到n,兔子每天晚上會跳到相鄰的一個洞里,小q每天只能白天檢查其中的一個洞,小q會告訴你每天檢查的洞,分析是否一定能抓到兔子示例:3個洞,第一…

es6 --- 模塊

function foo(){var something cool;var another [1, 2, 3];function doSomething() {console.log( something );}function doAnother() {console.log( another.join( " ! " ) );} } // 是一個不明顯的閉包,doSomething()和doAnother()保持了foo的內部作用域接下來…

Java之遞歸遍歷目錄,修改指定文件的指定內容

EditProperties.java 1 package PropertiesOperation.Edit;2 3 import java.io.File;4 5 /**6 * 替換指定Porpoerties文件中的指定內容7 * 三個參數:8 * filePath:存放properties文件的目錄9 * srcStr:需要替換的字符串 10 * desStr&…

學習日志---7

1.復習Linux hadoop hdfs MapReduce基礎知識 1,列舉linux常用命令 shutdown now reboot mkdir mkdir -p touch filename rm -r filename rm -rf filename vi filename i--->可編輯狀態 esc --> : --->wq 保存退出 q! wq! cat grep find ifconfig ping user…

javascript --- 屬性描述符

從ES5開始,所有的屬性都具備了屬性描述符 var myObject {a: 2 };Object.getOwnPropertyDescriptor(myObject, "a"); //{ // value:2, // writable: true, // 可寫 // enumerable: true, // 可枚舉 // configurble: true // 可配置 //}定義屬性…

看了嗎網址鏈接

sklearn實戰-乳腺癌細胞數據挖掘(博主親自錄制視頻) https://study.163.com/course/introduction.htm?courseId1005269003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare # -*- coding: utf-8 -*- ""&qu…