まず、この質問には適切なタイトルが見つかりません。自由に編集してください。約束事としてのIndexDBカーソル.onsucess
私は例えば、単純な関数呼び出し、この関数を呼び出すとき今
loadNeededParcels = property => {
const dbResults = [];
var readTransaction = this.db
.transaction("parcelData")
.objectStore("parcelData");
readTransaction.openCursor().onerror = e => {
console.log("open cursor error ", e);
};
readTransaction.openCursor().onsuccess = e => {
const cursor = e.target.result;
if (cursor) {
dbResults.push(cursor.value);
cursor.continue();
} else {
return dbResults;
}
};
};
、indexDbからオブジェクトを読み込み、以下の機能を持っている:
console.log(loadNeededParcels('hasData'))
コンソールログがundefined
です。関数がカーソルが終了し、変数dbResults
を返すのを待たないので、これが起こっていると思いますか?
私の質問はこれです - どうすればこの機能を約束するか、あるいはreadTransaction.openCursor().onsucess
がトリガーするのを待つことができますか?
したがって、関数が終了する前にデータベースから読み取った値を実際に返すことが期待されます。
IEで.getAll()
メソッドがサポートされていないため、カーソルを使用しています。
ここではプロパティをopenCursorの引数として渡しますが、プロパティはキーではないので動作しません。また、プロパティの後の疑問符は何を表していますか?しかし、ええ、あなたのアプローチを使用してメソッドを書き直したのはopenCursorを1回だけ使うことで、これは以前より少し速くなっています –
擬似コードです。あなたのコードが何をしようとしているのか分かりません。疑問符はそれを示すはずだった。範囲または値パラメータなしでカーソルを開くと、ストア内のすべてのオブジェクトを反復処理していることを意味します。 – Josh
基本的には、データベースからすべてのレコードを取得し、渡されたプロパティが未定義のレコードのみを返します(つまり、parcel [property] ===未定義の場合) –