私は現在、電子を使って練習中ですが、私はJavaScriptで非常に新しく、私は完全に困惑しています。array.lengthは0ですが、配列に要素があります
function getPaths() {
var dirPath = document.getElementById("mdir").innerHTML;
var filePaths = [];
fs.readdir(dirPath, function(err, dir) {
for(var i = 0, l = dir.length; i < l; i++) {
var filePath = dir[i];
filePaths.push(dirPath + "/" + filePath);
}
});
console.log(filePaths);
console.log(filePaths.length);
}
dirPath
で定義されたディレクトリの中に見えるようになっている、それはをループし、そのディレクトリ内のすべてのファイルのフルパスを取得します。私は、次のコードがあります。それを配列に追加してから、一番下には配列をコンソールに記録し、その後に配列の長さを記録します。 何が私を困惑させるのは、そのコードが与えられたとき、アレイは期待通りにコンソールにログを記録しますが、コンソールは長さとしてゼロを記録します。私の現在の考え方は、スコープと何か関係があるということですが、それは実行中の関数の上の配列のfilePaths
という配列を宣言しているので意味がありません。私が何かを見逃していない限り。誰かが間違っていることを指摘できますか?
ように私は、応答時間がディレクトリの内容 – MaxZoom
に基づいて大幅に異なる可能性があるので 'setTimeout'機能を使用することをお勧めしません意味@ MaxZoom私は解決策として 'setTimeout'を提案しませんでした!私は問題の非同期性を強調するために 'setTimeout'を使って分かりやすい例を使ってOPの問題を説明しました! –
だから、もし私がこの権利を持っていれば、値を得られない理由は、readdirが非同期であるからです。その結果、console.log()は配列が構築される前に完了し、結果として0を返します。 – Taira