我可以在做其他功能之前等待HTML5 FileSystem DirectoryReader吗?

时间:2012-09-21 11:37:57

标签: html5 filesystems

我尝试使用新的HTML5 FileSystem API来使用javascript创建/添加/删除文件。 (用于自助服务台)

当前代码:

var entries;
function onInitFs(fs) {
    fileSystem = fs;
    debug('Opened file system: ' + fs.name);
    loadFilelist();
    // The functions below execute before loadFilelist() is ready!
    setFileList(entries);
    showFilenames(entries);
}

function loadFilelist() {
    entries = [];
    var dirReader = fileSystem.root.createReader();
    readEntries();

    function readEntries() {
        dirReader.readEntries(function(results) {
            if (results.length > 0) {
                debug(results.length + " Files added to the filesystemFilelist");
                entries = entries.concat(toArray(results));
                entries.sort();
                readEntries();
            }else{
                debug(entries.length + " Files in the filesystemFilelist");
                //done
            }
        }, fileErrorHandler);
    };
}

/* For putting debug text in the debug screen (in this case its the console) */
function debug(content) {
    window.console.log(content);
}

这个问题是函数dirReader.readEntries(function(),callback)等待回调。与此同时,接下来的代码已经执行。 我在File API中查找了它,似乎该函数仅适用于回调

如何防止函数调用

setFileList(entries);
showFilenames(entries);

在loadFilelist完成之前执行?

提前致谢

2 个答案:

答案 0 :(得分:0)

目前我正在使用工作人员进行同步工作!作品完美!我在main脚本和worker脚本之间创建了一个“命令系统”。 如果有人有兴趣,我会发布基础知识!几乎没有人看过这个问题,所以现在我只把它标记为已解决

答案 1 :(得分:0)

@Jimbo

请求的代码示例

主要javascript中的代码

/**
 * Make a listener for the worker
 * 
 * @param {object}
 *            worker
 */
function workerListener(worker) {
    worker.onmessage = function(event) {
        switch (event.data.cmd) {
        case 'log':
            _Some_log_function(event.data.message);
            break;
        case 'error':
            _Some_error_handling(event.data.message, event.data.priority);
            break;
        case '_Some_command':
            _Some_function();
            break;
        default:
            break;
        }
    };
}

/**
 * Sends a message to a worker
 * 
 * @param {Object}
 *            worker
 * @param {Object}
 *            message JSON Object
 */
function postMessage(worker, message) {
    /* send message to the worker */
    worker.postMessage(message);
}

工作者javascript中的代码

/**
 * Listener, Listens to messages from the main thread
 * 
 * @param {Object}
 *            event
 */
self.onmessage = function(event) {
    _log(event.data.cmd);
    switch (event.data.cmd) {
    case 'init':
        _Some_init_function(event.data.filesystemsize,
                event.data.directory);
        break;

    case '_Some_Sendingmeganism':
        sendMail(event.data.receipt, event.data.filename, event.data.email);
        break;

    default:
        break;
    }
};