我尝试使用新的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完成之前执行?
提前致谢
答案 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;
}
};