Как я могу получить свой код, чтобы вернуть результат вовремя - PullRequest
0 голосов
/ 31 октября 2019

У меня есть эта функция, я пытаюсь получить любимые фильмы с определенной конечной точки, используя угловую. После получения всего списка фильмов из метода класса, когда я пытаюсь использовать этот список, я вижу, что список недоступен.

Это то, что я пробовал.

    import { Injectable } from '@angular/core';
    import {HttpClient} from '@angular/common/http'
    import {Observable} from 'rxjs'
    import { map, tap } from 'rxjs/operators';
    import { IMovie } from './welcome/welcome-page/movies-model';

    @Injectable({
      providedIn: 'root'
    })
     export class FavoriteMoviesService {
        movieList: IMovie[];
        constructor(private _http: HttpClient) {
      }

      getFavMovies(id: number) {
        let getMovies = () => {
          return this._http.get('../assets/movies.json').pipe(
          tap(response => console.log(response))
          ).subscribe(response => response = this.movieList)
       }
         getMovies();
         let chosenMovie = this.movieList? this.movieList.find(movie => movie.id == id): Array(null)
         console.log(chosenMovie)
         }   
      }

Я действительно не понимаю, как работает программа, я думал, что свойство movieList было установлено при вызове функции getMovies (), но локальная переменная selectedMovie не получает желаемого значения. Пожалуйста, какое-нибудь объяснение этого поведения?

Ответы [ 2 ]

2 голосов
/ 31 октября 2019

Вам следует дождаться ответа, прежде чем использовать список moviesList. Измените функцию, как показано ниже, чтобы обрабатывать ответ после его получения.

      getFavMovies(id: number) {
        this._http.get('../assets/movies.json').pipe(
          tap(response => console.log(response))
          ).subscribe(response => {
              this.movieList = response;
              let chosenMovie = this.movieList? this.movieList.find(movie => movie.id == id): Array(null);
              console.log(chosenMovie)
            })
      }
0 голосов
/ 31 октября 2019

Вы делаете это неправильно, присваивая this.moviesList значение response, полученному после http-вызова, выполнив: response = this.movieList:

let getMovies = () => {
          return this._http.get('../assets/movies.json').pipe(
          tap(response => console.log(response))
          ).subscribe(response => this.moviesList = response.data; // whatever is your object for movielist)
       }

Поскольку movieList пусто, оно вернется пустымответ и, следовательно, никакого результата.

Вы должны вернуть response в блоке подписки.

...