承诺 Angular Dexie(indexedDB)

Promises Angular Dexie(indexedDB)

我是 Angular、Dexie(indexedDB) 和 Promises 的新手,所以请多关照。

我的数据库中有一些数据,为了保持简单和不言自明,假设每个条目都保存 id,(dogName)和 dogBreed.

我想做类似的事情:

if (id === 1) {
    // add some data
}else {
    // add some other data

但如果我这样做:

db.list.get({id: 1}, temp => this.entry = temp);

然后我可以在我的 HTML 中使用它,但在我的 ts 文件中它仍然未定义。 所以我试着用承诺来做到这一点,这就是我到目前为止想出的:

db.list.where('id').equals(1).first().then(function() {
    // add some data 
}).catch(function() {
    // add some other data
});

我希望,如果没有 id = 1 的条目,它会进入 catch,但它没有。 我想我必须用 resolve 和 reject 做点什么,但到目前为止我还不理解它们,所以我可以使用它们。

有人知道如何解决这个问题吗?

如果没有找到结果,从 db.list.where('id').equals(1).first() 返回的 promise 将解析为值 undefined 而不是 reject。

所以你基本上应该这样做:

db.list.where('id').equals(1).first().then(function(item) {
    if (item) {
        // add some data 
    } else {
        // add some other data
    }
}).catch(function(error) {
    // log or show the error
});