0

我目前正在编写一个 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 成功时的回调函数

4

2 回答 2

3

您将unzip的结果removeRecursively传递给未定义的 。

你可能想要做的是

removeRecursively(filesystem.root, function() { unzip(url); }, onerror);

这里你传递一个函数作为参数,这个函数调用你想要的参数解压缩。

于 2013-05-27T13:38:22.040 回答
1

你在打电话

removeRecursively(filesystem.root, unzip(url), onerror);

但解压缩不返回任何东西

function unzip(URL) {
    importZipToFilesystem(URL, function(){
        console.log("Importing Zip - Complete!");
    });
}

removeRecursively因此( )的第二个参数onend变为undefined,当您尝试将其用作函数时,这可能会导致错误。

如果你想使用 unzip 函数作为回调,你应该只传递unzip(而不是unzip(url))而不调用它,然后调用onend(URL)inside removeRecursively

于 2013-05-27T13:31:15.853 回答