2012-09-21 43 views
0

我試圖使用新的HTML5 FileSystem API用JavaScript創建/添加/刪除文件。 (適用於自助服務收銀臺使用)在執行其他功能之前,我可以等待HTML5 FileSystem DirectoryReader嗎?

當前代碼:

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(()的函數,回調),等待回調。同時接下來的代碼已經執行。 伊夫看着它在File API,似乎功能只有一個回調的作品

如何防止該函數調用

setFileList(entries); 
showFilenames(entries); 

執行loadFilelist之前完成?

在此先感謝

+0

呵呵似乎有一個同步的方式來做到這一點descibed [這裏](http:// w ww.w3.org/TR/file-system-api/#the-directoryentrysync-interface)任何能幫助我的人? – Marcel

回答

0

目前即時通訊使用的工人做同步的工作!完美的作品!我在主腳本和工作腳本之間做了一個'command system thingy'。 如果有人感興趣,我會發布基本知識!幾乎任何人都看着這個問題所以現在我只把它標記爲解決

+0

你應該在這裏提供一個代碼示例 - 以當前的形式,這個答案對'0'人來說很有幫助。 – Jimbo

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; 
    } 
}; 
相關問題