0

как мне в tmp записать полученные данные? Через return из функции возвращается объект promise, а в самой функции tmp не видно

tmp: string;

constructor(private http: Http) {
  this.tmp = "load";
  this.GetUsers();
}

ngOnInit() {
  setTimeout(console.log("Hello"), 2000);
}
GetUsers() {
   this.http.get('http://localhost:1337/api/users')
    .toPromise()
     .then(function(response) {
       this.tmp = "success"
     })
    .catch(this.handleError);

плюс этому не работает setTimeout. То есть он срабатывает лишь раз и все.

Nikolay
  • 824
  • Попробуйте заменить функцию на стрелочную. .then((response) => { this.tmp = "success" }) – Nazar Kalytiuk Jul 17 '17 at 17:59
  • @НазарКалитюк получилось!) но вопрос с выводом из функции все равно открыт. С промизами я плохо дружу – Nikolay Jul 17 '17 at 21:10
  • Попробуйте async await. По промисам можете посмотреть видео https://www.youtube.com/watch?v=vNEDPtVchfw&t=2s или на этом же канале есть курс по ангуляр 2 – Nazar Kalytiuk Jul 18 '17 at 10:22
  • Для чего вам список юзеров? Ангуляр умеет выводить результаты асинхронных запросов в темплейт с помощаю пайпа async – Igor Golovin Jul 19 '17 at 22:21

1 Answers1

2
  1. Получать любые данные надо в ngOnInit
  2. Если версия ангуляра 4.3+ то юзай HttpClient

    public tmp: string;
    
    constructor(private http: HttpClient) { // не забудь заимпортить этот модуль
    
    }
    
    ngOnInit() {
      setTimeout(console.log("Hello"), 2000);
      this.GetUsers()
         .do(() => this.tmp = 'load')
         .subscribe(data => {
            this.tmp = data;
          });
    }
    
    private getUsers(): Observable<any> {
      return this.http.get<any>('http://localhost:1337/api/users')
    }
    
Artsiom
  • 622