Uncaught DOMException: не удалось выполнить «delete» для «IDBObjectStore»: транзакция не активна - PullRequest
0 голосов
/ 14 марта 2020

Я получаю эту ошибку, когда пытаюсь сохранить модель тензорного потока js в IndexedDb. В основном я работаю над автономным веб-приложением, которое может предсказывать эмоции в режиме реального времени. Чтобы сделать мое приложение быстрее, я должен использовать Indexed Db. Передний конец находится в Reactjs. Ошибка появляется в этой строке:

await this.model.save('indexeddb://' + INDEXEDDB_KEY);

Вот код.

  try {
    this.model = await tf.loadLayersModel('indexeddb://' + INDEXEDDB_KEY);

    // Safe to assume tensorflowjs database and related object store exists.
    // Get the date when the model was saved.
    try {
      const db = await openDB(INDEXEDDB_DB, 1, );
      const item = await db.transaction(INDEXEDDB_STORE)
                           .objectStore(INDEXEDDB_STORE)
                           .get(INDEXEDDB_KEY);
      const dateSaved = new Date(item.modelArtifactsInfo.dateSaved);
      await this.getModelInfo();
      console.log(this.modelLastUpdated);
      if (!this.modelLastUpdated  || dateSaved >= new Date(this.modelLastUpdated).getTime()) {
        console.log('Using saved model');
      }
      else {
        this.setState({
          modelUpdateAvailable: true,
          showModelUpdateAlert: true,
        });
      }

    }
    catch (error) {
      console.warn(error);
      console.warn('Could not retrieve when model was saved.');
    }

  }
  // If error here, assume that the object store doesn't exist and the model currently isn't
  // saved in IndexedDB.
  catch (error) {
    console.log('Not found in IndexedDB. Loading and saving...');
    console.log(error);

    this.model = await tf.loadLayersModel(MODEL_PATH);
    console.log(this.model,"model")
    await this.model.save('indexeddb://' + INDEXEDDB_KEY);
  }
}
// If no IndexedDB, then just download like normal.
else {
  console.warn('IndexedDB not supported.');
  this.model = await tf.loadLayersModel(MODEL_PATH);
}

this.setState({ modelLoaded: true });


// Warm up model.
// let prediction = tf.tidy(() => this.model.predict(tf.zeros([1, IMAGE_SIZE, IMAGE_SIZE, 3])));
// prediction.dispose();

}

'' '

1 Ответ

0 голосов
/ 15 марта 2020

транзакция закрывается, если нет ожидающих запросов. Похоже, ваши ожидающие делают не-indexeddb вещи, и, естественно, потому что вы не сразу ставите в очередь некоторые запросы в транзакции, она закрывается, а затем, когда вы в конечном итоге позже запрашиваете что-то в транзакции, она закрывается этим время (неактивно).

начать транзакцию после выполнения других асин c. не делайте асин c вещей между началом транзакции и добавлением запросов к ней.

...