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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

用async 解放你的大脑

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用async 解放你的大脑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在js中,代碼嵌套和代碼回調非常常見,不僅編寫麻煩而且異常反人類。讓我等碼農很是頭痛

function () {function () {function () {function () {//pass}}} }

?這是一個常規的嵌套,如果每個function 的邏輯處理都比較多的話,會導致整個代碼非常長,不僅編碼困難,而且閱讀起來也是很是蛋疼, 這種情況在js 中還是比較好的情況 ,還有非常惡劣的情況 ,考慮下在 異步嵌套的情況

var path = './async.txt'; // check if async.txt exists fs.stat(path, function (err, stats) {if (err)return errif (stats == undefined) {fs.readFile(__filename, function (err, content) {if (err)return errvar code = content.toString();fs.writeFile(path, code, function (err) {if (err)return errconsole.log('async.txt created!');});});} });

?

?這是一個異步嵌套代碼,先檢查文件是否存在,不存在則把某個文件的內容提取出來然后在寫入另外一個文件,看起來還算好,但是遺憾的是這樣的編寫無法把錯誤 return 到頂層例如 fs.writeFile return 的err 無法 在fs.stat 中接受到。如果想在外層接受到內部拋出的錯誤你會見到非常反人類的代碼,如下

function start (path,filePath){stats(path,function(err,stat){if (err) return err; else if(stat == undefined){reads(filePath,function(err,data){if (err)return err;var code = data.toString();writes(code,function(err,result){if (err)return errconsole.log('async.txt created!');}) })}}) }function stats (path, fn) {fs.stat(path, function (err, stats) {if (err)fn(err, null);fn(null, stats);}); }function reads (filePath,fn){fs.readFile(filePath,function(err,content){if (err)fn(err, null);fn(null, content);}); }function writes(data,fn){fs.writeFile(filePath,data,function(err,content){if (err)fn(err, null);fn(null, content);}); }

?

wtf ,這樣惡心的代碼 實在無法讓人喜歡,但是不得已為之,如果想在外層接受錯誤信息在沒有async 之前 常規的寫法就是上面那樣 把異步代碼包括回調抽出來成為一個單一的方法 然后調用,這樣會導致代碼的結構更加臃腫 更加反人類,看了一眼就不想看第二眼的! 不僅編寫的痛苦,維護的更痛苦

但是有了async 一切就不同了

?

var fs = require('fs'); var async = require('async');var path = './async.txt'; async.waterfall([// check if async.txt existsfunction(cb) {fs.stat(path, function(err, stats) {if (stats == undefined) cb(null);else console.log('async.txt exists');});},// read the contents of this filefunction(cb) {fs.readFile(__filename, function(err, content) {var code = content.toString();cb(null, code);});},// write the content to async.txtfunction(code, cb) {fs.writeFile(path, code, function(err) {if (err) throw err;console.log('async.txt created!');});} ]);

改變之后的結構就像同步那樣編寫異步回調代碼,不僅結構清晰而且代碼編寫非常簡單,寫完之后頓時 頭不痛了,腿不酸了,感覺時間如此美好了 !這等利器真是解放我等碼農的大殺器啊! 當然還有老趙的 wind.js 更符合。net 4.5 中async 和await 的寫法 ,很是犀利

async 傳送門 https://github.com/caolan/async#waterfall
wind.js 傳送門 http://windjs.org/cn/

當然在nodejs 鼎鼎大名的 async 不會只有這點功能,奈何小弟才疏學淺,疏于皮毛,僅會于此,如有任何錯誤,歡迎拍磚
enjoy !

轉載于:https://www.cnblogs.com/trigged/archive/2013/02/22/2921885.html

總結

以上是生活随笔為你收集整理的用async 解放你的大脑的全部內容,希望文章能夠幫你解決所遇到的問題。

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