gpt4 book ai didi

javascript - YDN-DB 如何验证记录是否存在?

转载 作者:行者123 更新时间:2023-11-28 01:55:21 27 4
gpt4 key购买 nike

我正在尝试验证给定 ID 的表中是否存在特定记录。例如:

var id = 23;
db.count('products',id).done(function(count) {
if(count>0){
db.get('products',id).done(function(r) {
//Do something
});
}else{
alert('No product found');
}
});

当我尝试此操作时,出现以下错误:未捕获的异常:null

非常感谢您的帮助,谢谢!

最佳答案

您的解决方案几乎是正确的。

在 IndexedDB API 中,没有 exists 方法,可能是因为它可以使用 count 方法来模拟。但是 count 方法只接受键范围,因此存在性测试应该是:

var id = 23;
db.count('products', ydn.db.KeyRange.only(id)).done(function(cnt) {
if (cnt) { // exist

} else { // no exist

}
});

IndexedDB api 中不存在 exists 方法的另一个原因是,get 对于不存在的键不会给出错误。因此您可以安全地、推荐地执行以下操作:

var id = 23;
db.get('products', id).done(function(product) {
if (product) { // exist

} else { // no exist

}
});

我想指出的是,在这两种检测存在性的方法中,第一种方法更有效,因为它避免了反序列化。因此,如果您只需要测试是否存在,请使用第一种方法。要检索可能存在也可能不存在的记录,请使用第二种方法。

编辑:

通过主键 id 或唯一辅助键 sku 查询记录

/**
* @param {string} id id or sku
* @param {Function} cb callback to invoke resulting record value. If not exists in the
* database, null or undefined is returned.
*/
var getByIdOrSku = function(id, cb) {
var req = db.get('items', id);
req.done(function(item) {
if (item) {
cb(item)
} else {
db.values('items', 'SKU', ydn.db.KeyRange.only(id), 1).done(function(items) {
cb(items[0]); // may not have result
});
}
});
};

如果您更喜欢 promise 方式:

db.get('items', id).then(function(item) {
if (item) {
return item;
} else {
return db.values('items', 'SKU', ydn.db.KeyRange.only(id), 1).done(function(items) {
return items[0];
});
}
}).done(function(item) {
// result query as as id or SKU
console.log(item);
});

关于javascript - YDN-DB 如何验证记录是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19203164/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com