gpt4 book ai didi

javascript - for 循环运行之后的语句在 for 循环完成运行之前运行

转载 作者:行者123 更新时间:2023-11-30 20:42:34 24 4
gpt4 key购买 nike

为什么在循环完成之前解析 objlist。由于 for 循环是同步的,我希望在我的 for 循环完成后运行 resolve,但正在解析包含空对象的列表。

 function myFunction(path,files){
return new Promise(function(resolve,reject){
let objlist=[];
files.forEach(function(file,index){
console.log(file)
objlist[index]={};
fs.stat(path + '\\' + file, function(err,stats){
if(err){
console.log(err.code)
console.log(err)
throw err;
}
if(stats.isDirectory()){
objlist[index].file = 'folder'
}
else if(stats.isFile()){
objlist[index].file = 'file'
}
objlist[index].name = file
console.log(objlist[index].name) //gives correct output
objlist[index].size = stats.size
});
})
console.log(objlist); //gives list of empty objects
resolve(objlist);

});
}

最佳答案

如果您不想使用 await,您可以使用 Promise.all 或计数器来了解所有 fs.stat 何时已解决:

仅使用 Promise.all:

 function myFunction(path,files){
return Promise.all(files.map(function(file,index){
console.log(file)
var obj = {};
fs.stat(path + '\\' + file, function(err,stats){
if(err){
console.log(err.code)
console.log(err)
throw err;
}
if(stats.isDirectory()){
obj.file = 'folder'
}
else if(stats.isFile()){
obj.file = 'file'
}
obj.name = file
console.log(objlist[index].name) //gives correct output
obj.size = stats.size
return obj;
});
}))
.then(objList => {
console.log(objlist); //gives list of empty objects
resolve(objlist);
});
}

或者使用计数器:

 function myFunction(path,files){
return new Promise(function(resolve,reject){
let objlist=[];
var counter = files.length;
files.forEach(function(file,index){
console.log(file)
objlist[index]={};
fs.stat(path + '\\' + file, function(err,stats){
counter--;
if(err){
console.log(err.code)
console.log(err)
throw err;
}
if(stats.isDirectory()){
objlist[index].file = 'folder'
}
else if(stats.isFile()){
objlist[index].file = 'file'
}
objlist[index].name = file
console.log(objlist[index].name) //gives correct output
objlist[index].size = stats.size
if(counter == 0) {
console.log(objlist); //gives list of empty objects
resolve(objlist);
}
});
})
});
}

关于javascript - for 循环运行之后的语句在 for 循环完成运行之前运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49087796/

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