Почему эта переменная всегда возвращает ноль? Angular Сервис - PullRequest
0 голосов
/ 20 января 2020

Сейчас 8 часов пытаются решить тривиальную проблему, и я не могу в это поверить!

здесь, ниже скрипт angular service

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class GetStockDataService {

  constructor(public http:HttpClient) { }


  RequestData={"query":"{\n  stock{\n    history{\n      \n      low\n      high\n      demand\n    }\n  }\n}"}

getstockdata(){
  return this.http.post('http://localhost:3000/',this.RequestData)
}

}

и вот компонент скрипт, который вызывает эту службу

import { Component, OnInit } from '@angular/core';
import { GetStockDataService } from '../services/get-stock-data.service';
import { Platform } from '@ionic/angular';




@Component({
  selector: 'app-Stocks',
  templateUrl: 'Stocks.page.html',
  styleUrls: ['Stocks.page.scss']
})

export class StocksPage implements OnInit {

  constructor(private GetStockData:GetStockDataService , private platform : Platform) {}

  res:any

  ngOnInit(){

    this.getdata().subscribe(data=>{this.res=data});
    console.log(this.res)

  }
  getdata(){
    return this.GetStockData.getstockdata() }}   

ПОЧЕМУ переменная "res" всегда возвращает NULL ???? зная, что когда я помещаю консоль, записываю переменную внутри нее в функцию в части подписки ... она возвращает данные, но я не могу сделать эту переменную глобальной ... как я могу это сделать? Я просто хочу получить данные из подписки в переменную "res", чтобы позже использовать ее в файле HTML.

1 Ответ

2 голосов
/ 20 января 2020

Из-за асинхронного вызова c, console.log(this.res) выполняется до обработки вызова сервера.

Изменение

this.getdata().subscribe(data=>
{
  this.res=data
});
console.log(this.res)

К

this.getdata().subscribe(data=>
  {
   this.res=data; 
   console.log(this.res)
  });
...