1

そこで、 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 を直接操作するのは苦痛です)。

これを手伝ってくれて本当にありがとう!!

4

1 に答える 1

1

したがって、あなた.catch(alert())は偽陰性を返しています...約束が解決されてもアラートが表示されます...あなたが言ったことから、約束は解決されていないため、保留状態のままです。ブラウザのキャッシュをクリアすると役立ちます。このような

于 2016-04-10T11:53:00.823 に答える