小编nta*_*aso的帖子

Android上的Chrome:IndexedDB的授权配额突然几乎为0

最近Android Chrome的IndexedDB配额管理有变化吗?我在Ionic 3 Cordova应用程序中使用带有适配器IndexedDB的PouchDB.在过去的6个月里,它进展顺利.但是在过去的5天内,我收到的关于数据未在应用中正确加载的投诉显着增加.我的应用只需要3-4 MB的数据.这是我目前所知道的:

  • 问题仅发生在内部存储器上磁盘空间不足的情况下(即使应用程序安装在SD卡上)
  • 受影响的设备几乎总是只有16GB的内部磁盘空间,并且似乎一直都是满的
  • 释放磁盘空间可以解决问题
  • 当设备运行低于150-250MB左右时,IndexedDB 的授权配额似乎有一个明显的截止.如果释放额外的100-200MB,则授予的配额突然跳升到50MB或更多
  • 最近Chrome或Android出现了这个问题,因为我的应用最近没有收到更新,甚至影响了只有几KB数据的新用户.

我还怀疑也许人们在最后几天拍摄了更多的照片,因为天气非常好,导致可用磁盘空间减少,因此报告的错误数量激增.但我仍然觉得这是一个奇怪的解释.

其他人在他们的应用中发现了类似的问题 除了切换到Cordova-SQLite之外的任何解决方案?

更新2018-05-03:

我想了几件事:

  • 设备几乎总是需要1 GB以上的免费内部存储空间.500MB已经不够用了
  • 如果您计划使用PouchDB迁移到SQLite,请阅读此问题的注释.附件可能存在问题.
  • 如果您正在使用Ionic Storage(基于LocalForage),它将在您安装插件后自动切换到SQLite.在我的情况下,这导致数据库错误,我不得不切换drivers为Ionic的存储:driverOrder: ['localstorage', 'indexeddb', 'sqlite', 'websql']

android google-chrome indexeddb cordova pouchdb

8
推荐指数
1
解决办法
648
查看次数

RxJS:如何包装和观察字符串的变化?

RxJS:如何将原始类型(例如字符串)包装在Observable中,侦听对该原始类型的更改

考虑以下示例。setTimeout模拟一些改变字符串的外部事件s。但是,console.log仅触发一次,之后不触发setTimeout。这是为什么?

let s = "Hello World";
Observable.of(s).subscribe(val => {
    console.log(val);
});
// some external event changes variable s
setTimeout( () => {
    s = "Wat?";
}, 1000);
// Output: prints "Hello World" to console, but not "Wat?"
Run Code Online (Sandbox Code Playgroud)

这个问题听起来可能有些愚蠢,但是我搜索了2个小时的各种RxJS文档和示例,其中大多数使用Arrays或Objects。这不是我想要的。我不想更改属性,函数,数组或类似的东西。只是一个简单的字符串或布尔值或数字。

javascript primitive-types observable rxjs typescript

6
推荐指数
2
解决办法
2803
查看次数

RxJS 侦听事件但稍后附加事件侦听器

使用 RxJS,我想订阅事件。问题是:我想在设置事件侦听器之前设置 Observable。

把这想象成两个按钮:Button1 在被点击时会做一些事情,但只有在 button2 将事件侦听器附加到 button1 之后。观察者应该订阅 button1 的点击事件。当应用程序启动时,所有这些都应该连接在一起。Button2 不应该设置观察者!一些没有 RxJS 的代码:

button2.addEventListener('click', function() {
    // [...] some code to prevent that button1 has more than one event listener

    // attach event listener to button1
    button1.addEventListener('click', clickHandler);

    // now let observer subscribe itself to clickHandler somehow
    // -> HOW?
});


function clickHandler() {
    console.log("clicked");
}
Run Code Online (Sandbox Code Playgroud)

编辑:也许,是否有可能观察到某种从不发出任何内容的虚拟事件处理程序,但clickHandler在单击 button2 或类似的东西后变成真正的事件处理程序 ( ) ?!

Edit2:我注意到 2 个按钮不是最好的例子。让我们让它与众不同,并通过某种未知机制附加 button2 的事件侦听器。例如:

// is called by unkown means, i. e. the observer …
Run Code Online (Sandbox Code Playgroud)

javascript events rxjs

2
推荐指数
1
解决办法
3256
查看次数