Angular 2 http.get подписаться: Как вызвать другую функцию, когда служба завершена?

Не понимаю. Если мне нужен мой результат, чтобы сделать что-то большее, а не просто ввести мою переменную героев, например. Я хочу вызвать другую функцию в случае успеха или завершения, но не могу. Почему это и как это должно быть сделано? У меня есть другая переменная, которая должна получать те же данные, которые возвращаются из ответа (его копию), но я могу сделать копию только после того, как получу данные.

this.myService.getHeroes()
    .subscribe(
        function(response) {
            response => this.heros = response;
        },
        function(error) {
            console.log("Error happened" + error)
        },
        function() {
            console.log("the subscription is completed");
        }
    );

2 ответа

Решение

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

this.myService.getHeroes()
   .subscribe(res => {
      this.heros = res;
      //insert whatever you want here, e.g. function which needs to wait for asynchro response
    },
    error => { 
      console.log("Error happened" + error)
    }
 );

Чтобы расширить, что предоставил такой Добрый пользователь:

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

Чтобы ссылаться на переменные компонента, вы должны использовать вместо этого лямбда-выражения:

@Component({
  selector: 'app-browse',
  templateUrl: './browse.component.html',
  styleUrls: ['./browse.component.css']
})
export class BrowseComponent implements OnInit {

  constructor(private myService: MyService) { }

  myString: string = 'dogs';

  doStuff() {
    this.myService.doMoreStuff().subscribe(returnValue => {
      console.log(this.myString); // 'dogs'
      this.myOtherFunction(); // 'other stuff'
    });

    this.myService.doMoreStuff().subscribe(function(returnValue) {
      console.log(this.myString); // undefined
      // myString does not exist with the scope of this function
      var myString = 'cats';
      console.log(this.myString); // 'cats'
    });
  }

  myOtherFunction() { console.log('otherStuff'); }

}
Другие вопросы по тегам