相关疑难解决方法(0)

indexeddb 游标内的异步操作

我正在使用indexedDB承诺库将indexedDB API转换为承诺。

看起来当我的提取完成时,我的索引数据库事务不再处于活动状态。我猜是超时了?

我得到的错误是:

DOMException: Failed to execute 'delete' on 'IDBCursor': The transaction has finished.

我想要完成的是从indexedDB, 中删除项目,并且仅当提取成功完成时。我知道我可以在提取后创建第二个事务以获取项目并将其删除。但是我想知道不进行新交易是否有更好的方法?我错过了什么吗?

谁能向我解释为什么我会看到这个问题?

DBHelper.DBPromised.then( db => {
  const store = db.transaction('deferredReviews', 'readwrite').objectStore('deferredReviews');
  const submittedRes = {};
  store.openCursor()
    .then(function submitAndDelete(cursor) {
        if (!cursor) return;
        console.log(cursor.value);

        fetch(`${DBHelper.DATABASE_URL}/reviews`, {
          method: 'POST',
          body: JSON.stringify({
            restaurant_id: cursor.value.restaurant_id,
            name: cursor.value.name,
            createdAt: cursor.value.deferredAt,
            rating: cursor.value.rating,
            comments: cursor.value.comments
          })
        })
        .then(response => {
          if (!response.ok) {
            throw Error(response.statusText);
          }
          return response.json();
        })
        // If response is ok …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous promise indexeddb

2
推荐指数
1
解决办法
933
查看次数

标签 统计

asynchronous ×1

indexeddb ×1

javascript ×1

promise ×1