成人视屏在线观看-国产99精品-国产精品1区2区-欧美一级在线观看-国产一区二区日韩-色九九九

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

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

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

問(wèn)題描述

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

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);//開(kāi)始執(zhí)行 }});

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

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

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

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

綜上所述,我想知道的是

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

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

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

謝謝各位大佬賜教!

問(wèn)題解答

回答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ù)是在事件輪詢(xún)中被調(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)文章:
主站蜘蛛池模板: 女人张开腿让男人操 | 亚洲成人性视频 | a一级毛片免费高清在线 | 国产专区一va亚洲v天堂 | avav在线看 | 国产精品自拍合集 | 国产一区亚洲欧美成人 | 欧美毛片| 精品96在线观看影院 | 毛片免费观看的视频 | 久草福利资源网站免费 | 亚洲成人在线免费视频 | 韩国毛片免费看 | 成人午夜兔费观看网站 | 特黄特色三级在线观看 | 久久亚洲国产高清 | 欧美精品网站 | 毛片免费全部免费观看 | 久草视频在线资源 | 国产成人免费观看在线视频 | 成人在线免费播放 | 国产一级一片免费播放视频 | 国产原创系列在线 | 久草视频免费播放 | 免费一级毛片私人影院a行 免费一级毛片无毒不卡 | 久久国产99 | 国产成人精品亚洲一区 | 久久久精品免费视频 | 国产成人精品一区二区免费 | 91亚洲精品成人一区 | 国产亚洲精品资源一区 | 国产亚洲精品国看不卡 | 黄a一级 | 国产视频高清在线 | 日本精品一区二区三区在线视频 | 国产精品亚洲视频 | 黑人巨大videos极度另类 | 中文一级国产特级毛片视频 | 亚洲欧美日韩综合在线一区二区三区 | 最刺激黄a大片免费观看 | 久久综合久久自在自线精品自 |