запись дважды с использованием api filewriter в html5 приводит к ошибке - PullRequest
2 голосов
/ 16 июня 2011

Я пытаюсь использовать BlobBuilder и FileWriter API в HTML для записи данных в файл. Моя проблема в том, что если я использую функцию записи дважды, я получаю сообщение об ошибке. Следующие код выполняется ОК:

  var bb = new window.WebKitBlobBuilder();
  bb.append('LOREL');
  outWriter.write(bb.getBlob('text/plain'));

Но если я изменю это следующим образом (попробуйте написать дважды)

  var bb = new window.WebKitBlobBuilder();
  bb.append('LOREL');
  outWriter.write(bb.getBlob('text/plain'));
  bb.append('LOREL');
  outWriter.write(bb.getBlob('text/plain'));

Я получаю ошибку. Код ошибки: INVALID_STATE_ERR

Любая помощь будет оценена.

1 Ответ

2 голосов
/ 17 июня 2011

Проблема в том, что FileWriter.write() является асинхронным, и вы пытаетесь записать больше данных в файл до завершения первой записи. Согласно спецификации , FileException должен быть брошен, если readyState==WRITING. Скорее всего, что происходит в вашем случае. Вам нужно что-то вроде:

var bb = new window.WebKitBlobBuilder();
bb.append('LOREL');

outWriter.onwrite = function(e) {
  bb.append('LOREL');
  outWriter.write(bb.getBlob('text/plain'));
};

outWriter.write(bb.getBlob('text/plain'));

Кроме того, я надеюсь, что ваш фрагмент кода является лишь примером, и вы на самом деле не добавляете, не пишете, не добавляете, не пишете. В противном случае используйте один write():

var bb = new window.WebKitBlobBuilder();
bb.append('LOREL');
bb.append('LOREL');
outWriter.write(bb.getBlob('text/plain'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...