有没有办法找出localForage / indexedDb是否正在处理数据?

时间:2016-01-04 12:28:50

标签: javascript angularjs localforage

所以我有这个webapp,我使用async localForage(angular localForage是特定的)。现在,我想警告用户,如果他仍然尝试关闭浏览器窗口,同时仍有一些localForage操作正在进行。

我知道至少浏览器知道,因为在Firefox中,如果我关闭窗口,它会给我一个警告(虽然我再次打开一个窗口后)一些indexedDb操作被取消(localForage使用indexedDb)。

2 个答案:

答案 0 :(得分:2)

没有类似的可用内容,但您可以使用

的自定义服务包装localForage
  1. 在启动localForage的操作后设置特殊标记
  2. 释放回调中的标志(操作完成后)

答案 1 :(得分:0)

我认为这有点棘手,因为我不知道任何“IsBusy”函数可以与localForage甚至IndexedDB一起使用。可以临时设计合适的解决方案以检查单个操作是否已经完成。这也可以作为所有localForage异步操作的全面监视器使用。

例如:

function cbFunc(err, value) {
                    // Run this code once the value has been
                    // loaded from the offline store.
                    console.log(value);

                    DBWrapper.numCurrOps--;
                    if (DBWrapper.numCurrOps === 0)
                        DBWrapper.isBusy = false;
}

    var DBWrapper = {
            isBusy: false,
            numCurrOps: 0,
            getItem: function(key, cbFunc){
                DBWrapper.isBusy = true;
                DBWrapper.numCurrOps++;
                localforage.getItem('somekey', cbFunc);     
            }

        };

这是一个包装器的示例,它可以帮助您确定在后台是否至少有一个正在运行的异步操作等待完成。您可以向单例对象添加更多函数,并使它们也更改“isBusy”属性。