同步RxJ中的不同方法调用和返回响应

时间:2018-09-06 14:12:56

标签: angular typescript redux rxjs concatmap

我有一种从数据库中获取联系人数据的方法。

  

this.getContact(“ contact”);

获得所需的输出后,我想借助以下方法将其放入Json存储区:

  

this.local.saveRecord(“ contact”,c);

完成所有操作后,我想借助以下方法从存储中获取保存的数据:

  

this.local.getRecordList(“ contact”)

这三个操作应按顺序执行以返回到调用方。为此,我尝试使用以下代码:

public somemethod(): Observable<Contact[]> {
return this.getContact("contact")
  .delay(1000)
  .pipe(
    concatMap(con =>
      this.local.saveRecord<Contact[]>("contact", con).delay(1000)
    )
  )
  .pipe(
    concatMap(contacts =>
      this.local.getRecordList<Contact>("contact").pipe(
        map((contacts: any[]) => {
          // Processing of data
        })
      )
    )
  );
}  

但是我得到的答复总是Null。我对RxJs运算符不太熟悉。我们甚至可以跳过第二步,并根据需要直接从数据库中获取数据。我应该使用不同的运算符解决问题吗?还是我会以不同的方式思考?帮助表示赞赏。预先感谢。

1 个答案:

答案 0 :(得分:1)

使用正确的运算符:

public somemethod(): Observable<Contact[]> {
return this.getContact("contact")
  .pipe(
    mergeMap(contact => this.local.saveRecord('contact', contact)),
    mergeMap(record => this.local.getRecordList('contact'))
  );
}

现在要处理数据,只需调用

this.someService.somemethod().subscribe(contacts => {
  console.log(contacts);
});

您应该收到this.local.getRecordList('contact')的回复。是的,呼叫将被排序。