亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

javascript - Node.js中輸出順序?yàn)槭裁春皖A(yù)期的不一樣呢?

瀏覽:66日期:2023-09-07 18:37:29

問題描述

考察下面的代碼,它用于用于輸出指定目錄下的文件

var fs=require(’fs’);function sleep(numberMillis) { //sleep方法,暫停numberMillis毫秒 var now = new Date(); var exitTime = now.getTime() + numberMillis; while (true) { now = new Date(); if (now.getTime() > exitTime) return; } }fs.readdir(__dirname,function(err,files){ //文件讀取方法 console.log(’’); if(!files.length){console.log(’找不到文件 n’); }else{console.log(’文件如下:’);function file(i){ var filename=files[i]; fs.stat(__dirname+’/’+filename,function(err,stat){if(stat.isDirectory()){ console.log(’ ’+i+’文件夾:’+filename+’/...’);}else{ console.log(’ ’+i+’文件:’+filename+’’);} }); i++; //sleep(1000); //。。。。。。。。######暫停1sif(i==files.length){console.log(’輸出完畢’); }else{file(i); //否則遞歸調(diào)用 }}file(0);//開始執(zhí)行 }});

上述代碼輸出的結(jié)果我不能理解,按照這個(gè)程序設(shè)計(jì)的邏輯,應(yīng)該先是把目錄下所有文件都列出來,然后計(jì)數(shù)器i==files.length后才輸出“輸出完畢”這個(gè)終結(jié)語。

javascript - Node.js中輸出順序?yàn)槭裁春皖A(yù)期的不一樣呢?javascript - Node.js中輸出順序?yàn)槭裁春皖A(yù)期的不一樣呢?

如上圖所示,不但“輸出完畢”這個(gè)終結(jié)語最先輸出,而且打印順序完全是錯(cuò)亂的,多次運(yùn)行的打印順序也不穩(wěn)定。

我在想是不是異步調(diào)用有時(shí)間差,所以將上述代碼sleep(1000)注釋部分去掉,但是結(jié)果依然與我所預(yù)期不一致:“文件如下”提示語先輸出,此后停止1s后,后續(xù)語句幾乎同時(shí)出,沒有停頓,并且“輸出完畢”這個(gè)終結(jié)語依然第一個(gè)被打印。

綜上所述,我想知道的是

為什么打印結(jié)果不穩(wěn)定,為什么“輸出完畢”這個(gè)提示語首先被輸出?

為什么加上sleep(1000)這個(gè)暫停語句后,只有一開始停了1s,后面不再暫停而是同時(shí)輸出?

如何解決這個(gè)問題,即如何在修改盡可能少的情況下讓“輸出完畢”這個(gè)提示語最后輸出?

謝謝各位大佬賜教!

問題解答

回答1:

fs.stat是異步操作,所以你的輸出文件信息都是異步執(zhí)行的,“輸出完畢”肯定先打印的。想同步可以用這個(gè)https://nodejs.org/docs/lates...

在sleep里加個(gè)console.log(’sleep’)看是不是 只輸出一次?

如果你想保證輸出文件信息之后才輸出“輸出完畢”,第一點(diǎn)里我提到的用fs.statSync估計(jì)修改比較少吧

回答2:

根據(jù)@Dont的回答,確實(shí)是異步方法調(diào)用的原因,因?yàn)閒s.stat的回調(diào)函數(shù)是在事件輪詢中被調(diào)用,它一般在主程序運(yùn)行間隙時(shí)候被調(diào)用,被調(diào)用時(shí)間和順序不定。使用statSync方法可以實(shí)現(xiàn)同步:

(function file(i){ var filename=files[i]; function read(stat){if(stat.isDirectory()){ console.log(’ ’+i+’ 033[36m 文件夾:’+filename+’/...033[39m’);}else{ console.log(’ ’+i+’ 033[36m 文件:’+filename+’033[39m’);} }; read(fs.statSync(__dirname+’/’+filename)); i++; ................

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 亚洲欧美日韩v中文在线 | 成人精品国产亚洲 | 丝瓜着色的视频 | 欧美日韩影视 | 亚洲欧美一区二区三区九九九 | 91无限资源 | 国产一国产一级毛片视频 | 美女黄色三级 | 国产一级特黄生活片 | 成人亚洲欧美日韩在线 | 香蕉久久精品国产 | 久久午夜激情 | 亚洲国产激情在线一区 | 国产亚洲精品久久久久久久网站 | 伊人久久亚洲综合 | 国产11一12周岁女毛片 | 麻豆日韩区久久综合 | www.国产一区二区 | 国产成人精品高清不卡在线 | 亚洲天天在线日亚洲洲精 | 国产美女一区二区在线观看 | 经典香港一级a毛片免费看 春水堂在线 | 大香萑75久久精品免费 | 在线观看精品福利片香蕉 | 国产又污又爽又色的网站 | 男女自偷自拍视频免费观看篇 | 国产成人精品2021欧美日韩 | 亚洲精品美女久久久久 | 91在线免费视频 | 视频一区在线免费观看 | 国产青青在线视频 | 久久国产乱子伦精品免费一 | 欧美特级黄 | 九一在线完整视频免费观看 | 国产精品久久久久一区二区三区 | 日韩不卡视频在线观看 | 国产成视频 | 久久最新精品 | 国产亚洲精品第一区在线观看 | 免费性生活网站 | 88国产精品视频一区二区三区 |