【问题标题】:Hook logic in between stream : Rxjs Firebase Firestore流之间的挂钩逻辑:Rxjs Firebase Firestore
【发布时间】:2021-05-24 03:55:59
【问题描述】:
 this.store
      .collection(collectioName)
      .onSnapshot((data) => {
        
      });

我们可以使用 onSnapshot() 方法监听文档。每次内容更改时,另一个调用会更新文档快照。

我正在寻找钩子/rxjs 运算符,我们可以在数据即将更改/发出和流接收数据之间使用它。

会有帮助的

  1. 在我们获得新数据时显示加载微调器或
  2. 禁用表单或表格 当我们收到新的更新时

类似

 this.store
      .collection(collectioName)
      .onSnapshot()
.pipe(
  aboutToInitiate(() => { // start spinner },
  dataReceived(() => { // stop spinner, stream received }

).subscribe(() => {
// Or we can stop spinner here, but where exactly we hook the logic to start spinner 
    

);

注意:创建/更新(手动触发)时,我们可以开始 微调器并停止成功。 但是当流返回由服务器触发的更新或实时更新时, 当我们当时订阅时,我们需要显示微调器或指示器 我们即将收到一些数据和更新/接收的数据。

所以简而言之,订阅之间有一个钩子,当即将接收数据时自动启动微调器,当数据接收时自动停止。

我们可以使用 tap 操作符,但它会在收到数据后触发,而不是在它开始获取更新过程时触发。

【问题讨论】:

    标签: firebase google-cloud-firestore rxjs


    【解决方案1】:

    onSnapshot() 正在实时监听数据变化。这意味着您只能在初始化时使用微调器。之后的每一次更改都会立即发生,您的设备会从后端接收它或从您的设备更改。 您可以在初始化 onSnapshot()

    之前启动 Spinner
    //START Spinner
    
     const unsub= this.store
          .collection(collectioName)
          .onSnapshot((data) => {
            //STOP Spinner
          });
    
    
    //Stop listener
    unsub()
    

    使用unsub,您可以停止收听实时更改。

    您应该考虑的一件事是您是否启用了offline 功能。在这种情况下,您可以同时监听这两种变化:写入设备缓存的数据和写入后端的数据。 您可以通过启用元数据更改为您的听众来做到这一点,如下所示:

    db.collection("cities").doc("SF")
        .onSnapshot({
            // Listen for document metadata changes
            includeMetadataChanges: true
        }, (doc) => {
            // ...
        });
    

    然后您可以检测数据是仅写入设备还是写入服务器:

    db.collection("cities").doc("SF")
        .onSnapshot((doc) => {
            var source = doc.metadata.hasPendingWrites ? "Local" : "Server";
            console.log(source, " data: ", doc.data());
        });
    

    您可以在here找到更多相关信息。

    您可以使用metada 来确定数据何时写入本地(然后启动微调器)以及何时将其写入服务器(停止微调器)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多