Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 在RxJs中同步不同的方法调用和返回响应_Angular_Typescript_Redux_Rxjs_Concatmap - Fatal编程技术网

Angular 在RxJs中同步不同的方法调用和返回响应

Angular 在RxJs中同步不同的方法调用和返回响应,angular,typescript,redux,rxjs,concatmap,Angular,Typescript,Redux,Rxjs,Concatmap,我有一种从数据库中获取联系人数据的方法 本协议为:getContact(“联系人”) 在获得所需的输出后,我想借助下面的方法将其放入Json存储中: 这个.local.saveRecord(“contact”,c) 完成所有操作后,我想借助以下方法从存储中提取保存的数据: this.local.getRecordList(“联系人”) 这三个操作应按顺序执行,以返回给调用方。为了实现这一点,我尝试了以下代码: public somemethod(): Observable<Contact[

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

本协议为:getContact(“联系人”)

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

这个.local.saveRecord(“contact”,c)

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

this.local.getRecordList(“联系人”)

这三个操作应按顺序执行,以返回给调用方。为了实现这一点,我尝试了以下代码:

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
        })
      )
    )
  );
}  
public somemethod():可观察{
返回此.getContact(“contact”)
.延迟(1000)
.烟斗(
concatMap(con=>
this.local.saveRecord(“contact”,con).延迟(1000)
)
)
.烟斗(
concatMap(联系人=>
此.local.getRecordList(“联系人”)管道(
地图((联系人:任意[])=>{
//数据处理
})
)
)
);
}  

但是我得到的回应总是空的。我对RxJs操作符不太熟悉。如果需要,我们甚至可以跳过第二步,直接从数据库中获取数据。我应该使用不同的操作员来解决问题吗?或者我应该用不同的方式来思考?谢谢你的帮助。提前感谢。

使用正确的运算符:

public somemethod(): Observable<Contact[]> {
return this.getContact("contact")
  .pipe(
    mergeMap(contact => this.local.saveRecord('contact', contact)),
    mergeMap(record => this.local.getRecordList('contact'))
  );
}
您应该从
this.local.getRecordList('contact')
获得响应。是的,呼叫将按顺序进行

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