7

IndexedDB で一番上の 1 行だけを取得する方法はありますか? 何も見つかりませんでした。

4

5 に答える 5

9

カーソルを使用して .continue() を呼び出さないことは、まったくハックではありません。意図した方法です。カーソルの主なポイントの 1 つは、必要な情報だけを取得できることです。

したがって、 transaction.abort() を呼び出す必要はありません

于 2012-06-15T22:28:11.830 に答える
2

一種のハックですが、結果オブジェクトで continue() を呼び出さないと、最初のアイテムのみが処理されると思います。

以下は、カーソルを使用してクエリを実行し、1 つの結果のみを処理する簡単な例です。

var db = _IndexedDatabase;
var trans = db.transaction(["Sites"], IDBTransaction.READ_ONLY);
var store = trans.objectStore("Sites");
var request = store.openCursor();
request.onsuccess = function (e)
{
    var result = e.target.result;
    if(!!result == false) { return; }
    // Use result.value some how

    // Comment out this line to process the first item only
    //result.continue();
};
于 2012-01-28T00:49:31.140 に答える
1

Transaction.abort() を使用できます

たとえば、@Shawnの例を使用する場合

var db = _IndexedDatabase;
var trans = db.transaction(["Sites"], IDBTransaction.READ_ONLY);
trans.onabort = function(event) {
        console.log(event);
};
var store = trans.objectStore("Sites");
var request = store.openCursor();
request.onsuccess = function (ev)
{
    var cursor = request.result || ev.target.result;
    if(!!cursor == false)
            return;

    console.log(cursor.value);
    try{
        transaction.abort();
    }catch(e){
        console.log(e);
    }
}; 
于 2012-03-09T06:12:10.143 に答える
0

インデックスに対して Get メソッドを使用するだけです。これは、指定されたキーの最初のレコードを返します。唯一の欠点は、ソートできないことです。

于 2012-08-16T07:09:07.490 に答える
0

私は何も見つけられなかったので、これは私が今設置したものであり、私の目的にはうまく機能します. これはハックであり、私は満足していませんが、今のところ、これで十分です。

そのデータベースに必要な行を1つだけ保存しています。そして読み取り時に、すべての行を取得し、必要なアクションを実行します。これは 1 行だけです。新しい行を挿入するときは、データベース全体をクリアするだけです。これも 1 行だけで、新しい行が挿入されます。

@spiderdevil、私はあなたの答えを見たばかりで、トランザクションを中止できるかどうかわかりませんが、それが他の誰かにとって確実に機能する場合は、コメントで共有してください.

于 2012-03-09T20:45:27.703 に答える