0

所以我有这个webapp,我使用的是异步localForage(具体来说是角度localForage)。现在,如果用户尝试关闭浏览器窗口,而仍有一些 localForage 操作正在进行,我想警告用户。

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

4

2 回答 2

2

没有类似的东西可用,但您可以localForage使用自定义服务进行包装

  1. localForage启动操作后设置一个特殊标志
  2. 释放回调中的标志(一旦操作完成)
于 2016-01-04T12:39:10.190 回答
0

我认为这有点棘手,因为我不知道任何与 localForage 甚至 IndexedDB 一起使用的“IsBusy”函数。可以专门设计一个合适的解决方案来检查单个操作是否已完成。这也可以用作所有 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”属性。

于 2016-01-04T12:47:23.630 回答