我在我的项目中使用 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上尝试并从此链接 获取结果:文件系统:http ://fiddle.jshell.net:0/temporary/
我在想是不是写得这么快就不能及时保存了。所以我在它上面尝试了'setTimeout',它可以工作并完全写入。
有谁知道为什么?我怎样才能实现我想要的?如果你能帮助我,请先欣赏。