Возвращаемое значение undefined внутри подписки в angular js после получения значений из REST API

Это данные, возвращаемые REST API.

{

    "clo_change": 91.0,
    "vam_change": 72.76,
    "sla_change": 94.0,
    "feedback_change": 87,
    "so_change": 69.0,
    "cost": 87277.75

}

В моем файле service.ts я делаю запрос на URL-адрес

public getNewPlanData(): Observable<any>{
console.log("I am here createNewPlanModel");
    return this.http.get('http://localhost:8000/newplandata/')
        .map((response: Response) => {
         console.log("I am here createNewPlanModel2");
         return response.json()
        });
  }

Я подписываюсь на наблюдаемое в файле component.ts

this.mainService.getNewPlanData().subscribe(result =>{ 
      console.log("inside subscribe")
     this.newData=result;    
     console.log(this.newData)         
     }, error => console.log(error));  
    console.log("outside subscribe")

Когда я отлаживаю код в Chrome, в первый раз приложение не попадает и

значение не определено и печатается "внешняя подписка"

и во второй раз я получаю значения из REST API, и значения печатаются внутри цикла подписки, но он не доходит до следующего оператора console.log("outside subscribe"), вместо этого он выдает ошибку, например

Возвращаемое значение: undefined

и значения не используются для дальнейшей обработки.

Я хочу, чтобы значения this.newData использовались вне цикла подписки для дальнейшей обработки. Пожалуйста, помогите мне решить эту проблему.


person Jayashree    schedule 13.02.2019    source источник
comment
Узнайте, как использовать программирование на основе асинхронных событий. Вместе с потоками rxjs и конвейером async в angular. Вы не можете использовать что-то за пределами подписки, если только это не является немедленным разрешающим наблюдением, которое не   -  person Poul Kruijt    schedule 13.02.2019


Ответы (1)


В этой ситуации вы можете использовать тайм-аут, который может в некоторой степени помочь.

  setTimeout(() => {
      this.mainService.getNewPlanData().subscribe((result) => {
        console.log('inside subscribe');
        this.newData = result;
        console.log(this.newData);
      },
        (error) => {
          console.log(error);
        });
    }, 1000 );
    console.log('now I will have data '+this.newData);
person Hameed Syed    schedule 13.02.2019
comment
где именно вы собираетесь использовать this.newData в своем приложении. Можете ли вы опубликовать этот код? - person Hameed Syed; 13.02.2019
comment
Эта часть кода не выполняется this.finaldata.push([{axis:"CLO",value: this.newData[0]/100 },{axis:"VAM",value: this.newData[1]/100 },{axis:"SLO",value:this.newData[2]/100},{axis:"Feedback",value:this.newData[3]/100},{axis:"SA",value:this.newData[4]/100}]);, появляется сообщение Return value undefined, а приложение все еще ожидает результатов. - person Jayashree; 13.02.2019