我有一个带有两个参数的函数: entry ,一个文件条目(来自拖放源),以及 fileName ,即所述文件的名称。< / p>
我不确定这是否有帮助,但条目被声明为:
var entry = evt.dataTransfer.items[i].webkitGetAsEntry();
我想创建一个描述有关此条目的信息的数组,该数组包括文件名,文件大小,以不同单位表示的文件大小以及用于表示所述文件的单位。我在两个不同的点上将我的数组打印到控制台,一旦进入.file方法(我道歉,如果我使用了不正确的术语),再次在外面。当数组不在.file方法之外时,控制台不会为数组打印值。
我可以请求如何解决这个问题的帮助,以及为什么会发生这种情况?我在.file方法之外声明我的变量,所以我认为我的变量范围是正确的,但显然不是这样。
这是我的功能:
function getFileSize(entry,fileName)
{
var fileData = [];
var i = 0;
var byteSize = ['B','kB','MB','GB','TB'];
fileData.push(fileName);
entry.file(function(file)
{
var fsize = file.size;
var i = 0;
fileData.push(fsize);
while(fsize > 1024)
{
fsize = (fsize / 1024);
i++;
}
fileData.push(fsize.toFixed(2));
fileData.push(byteSize[i]);
console.log(fileData);
});
console.log(fileData);
}
答案 0 :(得分:1)
对.file()
的调用是异步的。当调用最后一个fileData
时,尚未填充console.log(fileData)
。如果您想将fileData
返回给来电者,
你还需要使getFileSize()
异步:
function getFileSize(entry, fileName, callback) {
...
var fileData = [];
entry.file(function(f) {
...
callback(fileData);
});
}