そこで、 dexie.jsと IndexedDB を初めて使用して、オフラインをサポートする小さなアプリを構築しています。ローカル マシンにデータベースが既に存在する場合は、その既存のデータベースを開いて使用したいので、 を使用して既存のデータベースが存在するかどうかを確認しますDexie.exists()
。Dexie.js wiki からサンプル コードを借りて、アプリに以下を追加しました (コンソールにログを記録するのではなく、アラートでテストしています)。
Dexie.exists("myDatabase").then(function(exists) {
if (exists)
alert("Database exists");
else
alert("Database doesnt exist");
}).catch(function (error) {
alert("Oops, an error occurred when trying to check database existence");
});
ただし、サンプルから直接取得したこのコードは機能しません。データベースが存在しない場合、コードは「データベースが存在しません」というアラートを正しく返します。ただし、テスト中に、以前にデータベースを作成し、 を使用して削除しましたdb.delete()
。ここで、削除したデータベースの存在をテストすると、何も返されません。「データベースが存在しません」または少なくともエラーが返されるはずですが、そうではありません。コードを次のように更新すると、次のことがわかりました。
Dexie.exists("myDatabase").then(function(exists) {
if (exists)
alert("Database exists");
else
alert("Database doesnt exist");
}).catch(
alert("Oops, an error occurred when trying to check database existence")
);
「おっと、データベースの存在を確認しようとしたときにエラーが発生しました」というアラートがポップアップします。残念ながら、エラーが何であるかはわかりませんcatch()
。匿名関数を削除したときにのみステートメントが機能する理由もわかりません。
のコードを見て、問題のデータベースDexie.exists()
ができるかどうかをテストします。open()
私が知る限り、私が削除したデータベースを開こうとすると、私の場合と同じようにDexie.exists()
失敗するようです。以前にデータベースを削除しようとしたときに何かを台無しにしたようですが、現在は Dexie が機能していません。Dexie には promise がうまく組み込まれているため、生成されていると想定しているエラーはまったく見られません。
これを解決しようとして約8時間費やしましたが、役に立ちませんでした。誰かが Dexie.js を使用した経験があり、私を正しい方向に向けることができれば、非常に感謝しています。または、誰かが IndexedDB の経験がある場合、ローカルの IndexedDB を「リセット」することで問題を解決できるかもしれません (実際にテスト中に何かを台無しにした場合)。ただし、これを行う方法を見つけることができませんでした (私が知る限り、IndexedDB を直接操作するのは苦痛です)。
これを手伝ってくれて本当にありがとう!!