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'); }
}