вызов одной функции после завершения асинхронной функции - PullRequest
0 голосов
/ 30 апреля 2019

Я видел вызывающие функции одну за другой с обещаниями, у меня есть асинхронная функция с наблюдаемой.

getHistoryData() {
    this.generatePayload()
    this.historyDataService
      .getHistoryData(this.payload)
      .subscribe(
        (data: any) => {
          const responeData: any = data.dataPoints;
          this.timestampArray = responeData.map(e => e.date.slice(5, 10) + ' ' + e.timestamp.slice(0, 5));
          console.log('temp array' + this.temperatureArray)
          this.temperatureArray = responeData.map(e => e.parameter1 / 100);
          this.dateArray = responeData.map(e => e.date);
        },
      )
  }  
other function is :

 updateChartData(){
  console.log('in update chart data')
  console.log('temp values' + this.temperatureArray)
  this.chartData[0].data =  this.temperatureArray
  this.labels = this.timestampArray
}

Я хочу звонить один за другим. Как это сделать?

1 Ответ

2 голосов
/ 30 апреля 2019

решение1: вызов updateChartData () в рамках обратного вызова подписка ():

getHistoryData() {
this.generatePayload()
this.historyDataService
  .getHistoryData(this.payload)
  .subscribe(
    (data: any) => {
      updateChartData();         
    },
  )
}

решение2 : Используя switchMap (), вы получаете доступ к данным в switchMap:

getHistoryData() {
  this.generatePayload()
  this.historyDataService
    .getHistoryData(this.payload)
    .subscribe(
      (data: any) => {}
    .switchMap((data) => {
      updateChartData();
    })
  )
...