0

我正在尝试使用新的 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 完成之前执行?

提前致谢

4

2 回答 2

0

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

于 2012-09-24T18:20:10.000 回答
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);
}

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;
    }
};
于 2014-02-27T16:15:24.820 回答