我可以等待HTML5文件系统目录阅读器在执行其他功能之前吗?



我试图使用新的HTML5文件系统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)等待回调。同时,接下来的代码已经执行。我在文件 API 中查找了它,似乎该函数仅适用于回调

如何防止函数调用

setFileList(entries);
showFilenames(entries);

在加载文件列表完成之前执行?

提前致谢

目前我正在使用工作线程来执行同步工作!效果完美!我在主脚本和工人脚本之间制作了一个"命令系统"。如果有人感兴趣,我会发布基础知识!几乎没有人看过这个问题,所以现在我只将其标记为已解决

@Jimbo请求的代码示例

主脚本中的代码

/**
 * 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);
}

Worker 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;
    }
};

最新更新