我有(改编)以下代码:
function saveFiles(saving_dir, content, name) {
var i = 1;
return new Promise(function(resolve) {
chrome.fileSystem.getWritableEntry(saving_dir, function(entry) {
entry.getFile(name, {
create: true
}, function(entry) {
entry.createWriter(function(writer) {
writer.onwrite = function() {
writer.onwrite = null;
writer.truncate(writer.position);
};
writer.onwriteend = function(e) {
console.log(i)
i++;
console.log('written! "' + name + '"')
// resolve();
};
writer.onerror = function(e) {
console.log('failed! "' + name + '"');
console.log(e);
};
var blob = new Blob([JSON.stringify(content)], {
type: 'text/javascript'
});
writer.write(blob);
}, function(e) {
trace.innerText = 'error is ' + e;
console.log(e);
});
});
});
});
}
saveFiles('/', 'hola', 'delete.txt');
我不知道为什么这是执行onwriteend
事件两次,console.log(i)
给出1
和2
。
如果我在两者之间添加日志,除了事件之外,所有内容都被调用一次。有小费吗?
触发write
,然后是onwrite
侦听器中的truncate
。
对truncate
的调用也会触发writeend
事件,根据规范的最后一个公开草案