Chrome app, Javascript, fileSystem -> createWriter -> onwriteend 被调用两次而不是一次(?



我有(改编)以下代码:

    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)给出12

如果我在两者之间添加日志,除了事件之外,所有内容都被调用一次。有小费吗?

触发write,然后是onwrite侦听器中的truncate

truncate的调用也会触发writeend事件,根据规范的最后一个公开草案

最新更新