日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Async同步执行异步函数

發布時間:2024/1/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用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同步执行异步函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。