gpt4 book ai didi

javascript - 为什么我无法从 Node.js 中的回调函数将对象插入数组?

转载 作者:行者123 更新时间:2023-12-03 06:01:08 24 4
gpt4 key购买 nike

我正在尝试使用“learnyounode”来学习node.js。有一个练习,应该将文件夹路径和文件扩展名类型作为输入,然后将该文件夹中该类型的所有文件作为输出。我构建了这个程序:

var fs = require('fs');
var pathModule = require('path');
var path = process.argv[2];
var ext = '.'.concat(process.argv[3]);
filteredList = [];
fs.readdir(path,function doneReading(err, list){
for(var i = 0; i < list.length; i++){
if(pathModule.extname(list[i]) == ext){
filteredList.push(list[i]);
}
}
})

for(var i = 0; i < filteredList.length; i++){
console.log(filteredList[i]);
}

由于某种原因

filteredList.push(list[i]);

对filteredList的内容没有影响。为什么是这样?我已经通过将 console.log 移动到 readdir 函数内部来解决了练习,但我不知道为什么 psuh 不起作用。

最佳答案

函数doneReading确实会影响filteredList,只是你没有等待它。 fs.readdir 函数是异步的,它需要回调。当调用回调的方法完成其工作时,将调用回调。回调不会阻止程序执行,从而打印列表为空。尝试将您的代码更改为:

fs.readdir(path,function doneReading(err, list){
for(var i = 0; i < list.length; i++){
if(pathModule.extname(list[i]) == ext){
filteredList.push(list[i]);
}
}
for(var i = 0; i < filteredList.length; i++){
console.log(filteredList[i]);
}
})

关于javascript - 为什么我无法从 Node.js 中的回调函数将对象插入数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39748934/

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