此代码将读取目录,并将所有文件路径字符串放入数组中,但是,我想将它们存储在变量中,但是当我这样做时,然后尝试记录该数组-返回未定义。
const fs = require('fs');
const path = require('path');
function filewalker(dir, done) {
let results = [];
fs.readdir(dir, function(err, list) {
if (err) return done(err);
var pending = list.length;
if (!pending) return done(null, results);
list.forEach(function(file) {
file = path.resolve(dir, file);
fs.stat(file, function(err, stat) {
// If directory, execute a recursive call
if (stat && stat.isDirectory()) {
// Add directory to array [comment if you need to remove the directories from the array]
results.push(file);
filewalker(file, function(err, res) {
results = results.concat(res);
if (!--pending) done(null, results);
});
} else {
results.push(file);
if (!--pending) done(null, results);
}
});
});
});
};
const allData = filewalker("./data", function(err, data) {
if (err) throw err;
return data;
});
console.log(allData);
如何将此函数的输出数据存储在我的allData常量中?
干杯!
答案 0 :(得分:0)
这可能不是您要寻找的答案,但是解决此问题的一种方法是在filewalker函数末尾隐式返回结果。 下一个问题是该函数是异步的,因此您必须等待其完成才能显示结果。
function openInAppBrowser() {
// Open URL
var open_url = 'http://www.sampleurl.com/sample.htm';
inAppBrowserRef = cordova.InAppBrowser.open(open_url, '_blank', 'clearcache=yes,clearsessioncache=yes,location=yes,hardwareback=no,zoom=no');
// Add event listener to close the InAppBrowser
inAppBrowserRef.addEventListener('message', messageCallBack);
};
function messageCallBack(params) {
// Close the InAppBrowser if we received the proper message
if(params.data.action == 'close') {
inAppBrowserRef.close();
}
};
一段时间后记录allData。在这里,您应该正确处理等待异步功能完成的过程。
fs.readdir(dir, function(err, list) {
if (err) return done(err);
var pending = list.length;
if (!pending) return done(null, results);
list.forEach(function(file) {
file = path.resolve(dir, file);
fs.stat(file, function(err, stat) {
// If directory, execute a recursive call
if (stat && stat.isDirectory()) {
// Add directory to array [comment if you need to remove the directories from the array]
results.push(file);
filewalker(file, function(err, res) {
results = results.concat(res);
if (!--pending) done(null, results);
});
} else {
results.push(file);
if (!--pending) done(null, results);
}
});
});
});
return results;