gpt4 book ai didi

file - Node isDirectory() 无法正常工作或者我丢失了一些东西

转载 作者:太空宇宙 更新时间:2023-11-04 01:13:09 27 4
gpt4 key购买 nike

我想从路径中获取文件和目录的所有名称并将它们识别为文件和目录。但是当我运行我的代码时,它有时会起作用,有时它会显示目录是文件。这是代码

socket.on('data',function(path){
fs.readdir('path',function(err, data) {
var filestatus=[];
var z=0;
var i=data.length-1;

data.forEach(function(file){
fs.stat(file, function(err, stats) {
filestatus[z]=stats.isDirectory()
if (z==i){
socket.emit('backinfo',{names:data,status:filestatus});
}
z++;
})
})
})
})

在测试过程中,我意识到当我减慢 data.forEach 循环(使用 console.log(something))时,它效果更好(更少错过)。这很奇怪。

最佳答案

这大约有 96% 不正确,感谢 JohnnyHK 指出我的错误,请参阅下面的评论以了解真正的问题/解决方案。

由于 fs.stat() 函数调用是异步的,因此对 filestatus 数组的操作是重叠的。您应该使用 async 按照 elmigranto 建议使用库,或者改用 fs.statSync。

有关正在发生的事情的更多详细信息:

当您调用 fs.stat() 时,它基本上在后台运行,然后立即进入下一行代码。当它获得文件的详细信息后,它会调用回调函数,在您的代码中,该函数是将信息添加到 filestatus 数组的函数。

因为 fs.stat() 在返回之前不会等待,所以您的程序会非常快速地遍历数据数组,并且同时运行多个回调并导致问题,因为 z 变量不会立即递增,因此

filestatus[z]=stats.isDirectory()

在 z 增加之前可以通过不同的回调执行多次。

希望这是有道理的!

关于file - Node isDirectory() 无法正常工作或者我丢失了一些东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14337105/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com