我目前正在编写一个API来将文件解压缩到Web浏览器沙箱文件系统。我基本需要将一个参数传递给一个函数,而该函数本身也作为参数传递。以下是一些代码来说明问题:
//Request a permanent filesystem quota to unzip the catalog.
function requestFilesystem(size){
window.webkitStorageInfo.requestQuota(PERSISTENT, size*1024*1024, function(grantedBytes) {
window.requestFileSystem(PERSISTENT, grantedBytes, function(fs) {
filesystem = fs;
removeRecursively(filesystem.root, unzip(url), onerror);
}, onerror);
}, function(e) {
console.log('Error', e);
});
}
//unzip method can be changed, API remains the same.
//URL of zip file
//callback oncomplete
function unzip(URL) {
importZipToFilesystem(URL, function(){
console.log("Importing Zip - Complete!");
});
}
//remove removeRecursively a folder from the FS
function removeRecursively(entry, onend, onerror) {
var rootReader = entry.createReader();
console.log("Remove Recursive"+entry.fullPath);
rootReader.readEntries(function(entries) {
var i = 0;
function next() {
i++;
removeNextEntry();
}
function removeNextEntry() {
var entry = entries[i];
if (entry) {
if (entry.isDirectory)
removeRecursively(entry, next, onerror);
if (entry.isFile)
entry.remove(next, onerror);
} else
onend();
**Uncaught TypeError: undefined is not a function**
}
removeNextEntry();
}, onerror);
}
如果我尝试使用
function removeRecursively(entry, onend(URL), onerror) {
有一个错误,我的问题是如何传递解压缩函数的URL值,这个解压缩函数用作removeRecursively onsuccess上的回调函数
答案 0 :(得分:3)
您正在将解压缩的结果传递给removeRecursively
,这是未定义的。
您可能想要做的是
removeRecursively(filesystem.root, function() { unzip(url); }, onerror);
这里传递一个函数作为参数,这个函数用你想要的参数调用unzip。
答案 1 :(得分:1)
您正在致电
removeRecursively(filesystem.root, unzip(url), onerror);
但解压缩不返回任何内容
function unzip(URL) {
importZipToFilesystem(URL, function(){
console.log("Importing Zip - Complete!");
});
}
因此removeRecursively
(onend
)的第二个参数变为undefined
,当您尝试将其用作函数时,可能会导致错误。
如果你想使用解压缩功能作为回调,你应该在不调用它的情况下传递unzip
(而不是unzip(url)
),然后在onend(URL)
内调用removeRecursively
。