有没有办法在 IndexedDB 中只获得第一行?我找不到任何东西。
问问题
3974 次
5 回答
9
使用游标而不调用 .continue() 根本不是 hack。这是预期的方式。游标的一个要点正是它们让您只获取您需要的信息。
所以不需要调用 transaction.abort()
于 2012-06-15T22:28:11.830 回答
2
有点骇人听闻,但我相信如果您不对结果对象调用 continue() ,它只会处理第一项。
下面是一个使用游标查询并且只处理一个结果的快速示例。
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
由于我找不到任何东西,所以这就是我现在已经实施的,它对我的目的很有用。这是一个 hack,我对此不满意,但是,嘿,现在,这会做。
我只是在该数据库中存储我需要的一行。在阅读时,我得到所有行并执行我需要的操作,这只有一行。当我插入一个新行时,我只是清除了整个数据库,这又是一行,并在其中插入了一个新行。
@spiderdevil,我刚看到你的回答,不确定我是否可以尝试中止交易,但如果它确实适用于其他任何人,请在评论中分享。
于 2012-03-09T20:45:27.703 回答
0
只需在索引上使用 Get 方法。这将返回给定键的第一条记录,唯一的缺点是您无法排序。
于 2012-08-16T07:09:07.490 回答