使用Async同步执行异步函数
生活随笔
收集整理的這篇文章主要介紹了
使用Async同步执行异步函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為了適應異步編程,減少回調的嵌套,我在項目中引入了Async,當批量處理且需要同步執行一些邏輯相同的異步函數時,覺得還是Async最為靠譜。
我有一個類似下面代碼的場景,依據數組中的每一個元素執行一個異步回調函數,比如http.get。
var http = require('http'); var fs = require('fs'); var args_array = [{name: "hao123", url: "http://www.hao123.com/index.html"},{name: "ifeng", url: "http://www.ifeng.com/"},{name: "baidu", url: "http://www.baidu.com/index.php?tn=10018801_hao"} ];args_array.forEach(function (element) {var file = fs.createWriteStream(element.name);http.get(element.url, function (response) {console.log(element.name);response.pipe(file);}); });這個的代碼是可以正常工作的,但是有一個問題,文件下載的順序無法保證,我的需求是:數組中的每一個元素所執行的邏輯都依賴上一次執行的結果,下圖表明了上述代碼的執行的順序。
修正后的代碼,將單個執行邏輯封裝成一個Function,放到一個數組中,由Async去執行這個數組,方能保證他們的順序。
var initFunctions = []; var Async = require('async'); var http = require('http'); var fs = require('fs'); var args_array = [{name: "hao123", url: "http://www.hao123.com/index.html"},{name: "ifeng", url: "http://www.ifeng.com/"},{name: "baidu", url: "http://www.baidu.com/index.php?tn=10018801_hao"} ]; args_array.forEach(function (element) {initFunctions.push(function (callback) {var file = fs.createWriteStream(element.name);http.get(element.url, function (response) {console.log(element.name);response.pipe(file);callback();});}); }); Async.series(initFunctions, function (error, values) {if (error) {console.log(error);}else {console.log("over~");} });轉載于:https://www.cnblogs.com/fengxiang/p/3446302.html
總結
以上是生活随笔為你收集整理的使用Async同步执行异步函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hack1
- 下一篇: 如何在博客等文章中添加带有滚动条的文本框