0

JavaScriptでファイルを作成/追加/削除するために、新しいHTML5 FileSystem APIを使用しようとしています。(セルフサービスレジで使用する場合)

現在のコード:

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);

loadFilelist が完了する前に実行しますか?

前もって感謝します

4

2 に答える 2

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;
    }
};
于 2014-02-27T16:15:24.820 に答える
0

現在、ワーカーを使用して同期作業を行っています! 完璧に動作します!メイン スクリプトとワーカー スクリプトの間に「コマンド システム」を作成しました。誰かが興味を持っているなら、私は基本を投稿します!ほとんど誰もこの質問を見ていなかったので、今のところ解決済みとしてマークするだけです

于 2012-09-24T18:20:10.000 に答える