【发布时间】:2013-11-04 09:44:16
【问题描述】:
我在我的项目中使用 HTML5 的文件系统功能。并尝试使用 for 循环将文本追加到文件连续。但实际上它只会影响最后一次写入的一次写入,即使我得到5“写入完成。”(这应该意味着它成功写入5次)。这是我的代码:
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
var fs;
function initFS() {
console.log("init filesystem")
window.requestFileSystem(window.TEMPORARY, 1024 * 1024, function (filesystem) {
fs = filesystem;
console.log(fs);
}, errorHandler);
}
function errorHandler(e) {
var msg = '';
switch (e.code) {
...
};
console.log('Error: ' + msg);
}
function receiveFile(cont) {
fs.root.getFile('log.txt', {
create: true
}, function (fileEntry) {
// Create a FileWriter object for our FileEntry (log.txt).
fileEntry.createWriter(function (fileWriter) {
fileWriter.seek(fileWriter.length);
fileWriter.onwriteend = function (e) {
console.log('Write completed.');
};
fileWriter.onerror = function (e) {
console.log('Write failed: ' + e.toString());
};
// Create a new Blob and write it to log.txt.
var bb = new Blob([cont]);
fileWriter.write(bb);
}, errorHandler);
}, errorHandler);
}
function foo() {
for (i = 0; i < 5; i++) {
setTimeout(function () { // // it works, BTW: Why it didn't write the num in ascending order as expected
(function (x) {
receiveFile(x);
})(i)
}, i * 1000);
//receiveFile(i); // didn't work, just write once
}
}
window.addEventListener("load", initFS, false);
您可以在jsfiddle 上试用它并从以下链接获取结果:filesystem:http://fiddle.jshell.net:0/temporary/
我在想是不是写得这么快,不能及时保存。所以我尝试了 'setTimeout' ,它可以正常工作并完全编写。
有人知道为什么吗?我怎样才能实现我想要的?如果您能帮助我,请先感谢。
【问题讨论】:
标签: javascript html filewriter