Javascript 有没有办法确定LocalFower/indexedDb是否正在处理数据?

Javascript 有没有办法确定LocalFower/indexedDb是否正在处理数据?,javascript,angularjs,localforage,Javascript,Angularjs,Localforage,所以我有这个webapp,我使用的是异步localfollow(具体来说是角度localfollow)。现在,我想警告用户,如果他试图关闭浏览器窗口,而仍然有一些本地搜索操作正在进行 我知道,至少浏览器知道,因为在Firefox中,如果我关闭窗口,它会给我一个警告(尽管是在我再次打开窗口之后),一些indexedDb操作被取消(LocalFound使用indexedDb)。没有类似的内容可用,但您可以使用自定义服务包装LocalFound 启动带有localfound的操作后,设置一个特殊标志

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


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

没有类似的内容可用,但您可以使用自定义服务包装
LocalFound

  • 启动带有
    localfound
    的操作后,设置一个特殊标志
  • 释放回调中的标志(操作完成后)

  • 我认为这有点棘手,因为我不知道任何“IsBusy”函数可用于localfound甚至IndexedDB。可以专门设计一个合适的解决方案来检查单个操作是否已完成。这也可以作为所有本地异步操作的全面监视器

    例如:

    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);     
                }
    
            };
    

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

    我希望有一种更简单的方法,但无论如何还是要感谢。如果有人感兴趣,我制作的包装器是开源的,可以找到