第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

腳本中和在解釋器中使用 fs.readFile() 得到不同的結果

腳本中和在解釋器中使用 fs.readFile() 得到不同的結果

慕田峪9158850 2019-04-08 11:19:24
因為完全沒理解回調函數(shù)的概念,所以我寫了以下的代碼(function(){varfs=require('fs');varcallback=(function(){str='';returnfunction(err,contents){if(contents!==undefined){str+=contents;}returnstr;};})();fs.readFile(process.argv[2],'utf8',callback);varlines=callback().split('\n').length-1;console.log(lines);})();不知為何,在解釋器里直接運行則沒問題,可是保存為腳本運行時,lines就只能為0了,這是為什么呢?謝謝!
查看完整描述

2 回答

?
拉風的咖菲貓

TA貢獻1995條經(jīng)驗 獲得超2個贊

試下:
(function(){
varfs=require('fs');
varcallback=function(err,contents){
varstr='';
if(contents!==undefined){
str+=contents;
}
varlines=str.split('\n').length-1;
console.log(lines);
};
fs.readFile(process.argv[1],'utf8',callback);
})();
因為當保存為文件的時候,這里就用到了fs.readFile,而nodejs是異步非阻塞的.
它會先執(zhí)行后面的代碼,當文件讀取完之后再執(zhí)行callback中的方法,所以fs.readFile還沒有執(zhí)行完,就執(zhí)行了后面來計算行數(shù),當然為0了。
你可以在callback中console.log('hello'),看看執(zhí)行順序就知道了!
tips:你用callback()想要來獲取str也不對吧,連參數(shù)都沒有哦~
因此由于nodejs的異步非阻塞,當你需要獲取fs.readFile等類似的函數(shù)執(zhí)行的結果的時候,就需要將處理結果的代碼卸載callback中,否則代碼的執(zhí)行結果往往會令人匪夷所思。
當有大量的這樣的需求的時候就會出現(xiàn)callback的循環(huán)嵌套了,最后的代碼就會很難維護,所以就需要借助一個模塊來進行流程控制了,我用的是async。
注:當然nodejs也提供了readFileSync類似的同步函數(shù),但是非常不建議這么做,否則nodejs的優(yōu)勢就沒了!
                            
查看完整回答
反對 回復 2019-04-08
  • 2 回答
  • 0 關注
  • 415 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號