【发布时间】:2017-08-23 12:59:00
【问题描述】:
我知道这件事已经受到质疑,但实际上,我没有发现任何有用或可以理解的东西。
我有这个代码:
var pdfListPath = [];
function listDir(path) {
window.resolveLocalFileSystemURL(path,
function(fileSystem) {
var reader = fileSystem.createReader();
reader.readEntries(
function(entries) {
console.log(entries);
for (var i = 0; i == entries.length; i++) {
pdfListPath.push(entries[i]);
};
},
function(err) {
console.log(err)
}
);
},
function(err) {
console.log(err);
}
);
};
var pdfList = listDir(cordova.file.applicationDirectory + "www/pdf/");
console.log(pdfList);
console.log(pdfListPath);
我所期望的是pdfListPath 充满了一些东西,但我在控制台中得到的是“未定义”。
entries 是一个填充数组,这有什么问题?
提前谢谢你。
【问题讨论】:
-
你的代码是异步的,你需要在处理函数内的for循环之后移动
console.log(pdfListPath); -
TL;DR,
console.log(pdfList)发生在内部函数被异步调用之前。实际值仅在那些内部函数中可用(或使用 Promises 和/或async函数) -
function listDir(path, successHandler, errorHandler){ window.resolveLocalFileSystemURL(path, fileSystem => fileSystem.createReader().readEntries(successHandler, errorHandler), errorHandler) }或更好,你可以查看 Promises;避免代码中出现回调地狱。
标签: javascript arrays array-push