IndexedDB`upgradeneeded`事件中的`AbortError`

时间:2016-03-25 18:32:00

标签: google-chrome firefox indexeddb

在以下代码中,Firefox会向控制台添加AbortError,而Chrome则不会。

var bugDB = 'test1';
var delReq = indexedDB.deleteDatabase(bugDB);
delReq.onsuccess = function () {
    var req = indexedDB.open(bugDB);
    req.onupgradeneeded = function (e) {
        console.log('upgrade');
        req.result.close();
        console.log('finish closing');
    };
};

尽管此错误并未阻止执行&#34;完成关闭&#34;但它确实会导致Firefox的Mocha / Chai测试出现问题(尽管如果在{0}内调用req.results.close()则不会出现此类错误这是req.onsuccess处理程序。这是Firefox中的错误吗?如果AbortError正在某处传播(按设计?),如何成功捕获它(e.target.result.onabort不起作用?)< / p>

1 个答案:

答案 0 :(得分:2)

此行为符合规范:

https://w3c.github.io/IndexedDB/#opening

&#34;打开数据库的步骤&#34; 8.2:如果连接在升级之后但在成功之前关闭 - 这会在调用close()时发生,因为在升级事务完成之前实际上并未发生关闭 - 然后打开请求失败并且AbortError就像你一样#39;重新看到。

Chrome和Firefox中的行为相同; Chrome默认情况下不会记录错误。如果你添加:

req.onerror = function(e) {
  console.log(req.error.name, req.error.message); 
};

...你也会在Chrome中看到它。