Синхронизация различных вызовов методов и ответ в RxJ - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть один метод для получения контактных данных из базы данных.

this.getContact ( "контакт");

После получения желаемого результата я хочу поместить его в магазин 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
        })
      )
    )
  );
}  

Но ответ, который я получаю, всегда нулевой. Я не очень знаком с операторами RxJs. Мы даже можем пропустить второй шаг и получить данные непосредственно из базы данных, если это необходимо. Должен ли я использовать различные операторы для решения проблемы? Или я буду думать по-другому? Помощь приветствуется. Заранее спасибо.

1 Ответ

0 голосов
/ 06 сентября 2018

Используйте правильные операторы:

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'). И да, звонки будут упорядочены.

...