Я пытаюсь найти ID
из таблицы в моей базе данных, обратившись к моему серверу с помощью специального запроса. Однако, когда я отправляю GET Method
с моей службой и subscribing
на номер Observable
, это won't assign
ответ (который является только числом), к моему property
класса обслуживания. Вот мой код:Angular2: Подписка на Observable не присваивает значение ответа
rentedCarId:string;
getId(id:number): void {
let url = this.baseUrl+"/search/findRentedCar?customer="+sessionStorage.getItem("customerID")+"&car="+id;
console.log("Input id: " + id);
let headers = new Headers();
headers.set('Accept', 'application/json');
this
.http
.get(url, {headers})
.map(resp => resp.text())
.subscribe(
(id) => {
console.log(id); //This will print out the number!
this.rentedCarId = id; //This won't work! => undefined
},
(err) => {
console.error('Error while searching for rentedCar ID!', err);
});
}
deleteRentedCarEntry(id:number){
this.getId(id);
console.log("ID of Row in RentedCars table (response): " + this.rentedCarId); //will be undefined!
}
Метод deleteRentedCarEntry()
выполняется из другого компонента. Если я запустил его в начале заявки, log
в deleteRentedCarEntry()
возвращает undefined
для rentedCarId
! console.log
в методе subscribe
однако записывает правильное значение даже в первый раз! Почему он не присваивает значение id
из ответа после первого раза, но только во второй раз?
Вам необходимо вернуть наблюдаемый в getId, а когда вы вызываете его в deleteRentedCarEntry, подпишитесь на это наблюдаемое, а затем распечатайте его. – Steveadoo
@Steveadoo Это будет иметь тот же эффект, что и сейчас. Единственное, что изменилось бы, это то, что я бы подписался в другом методе, и вот он! Кстати, это тоже не работает! – Bajro
Нет, прямо сейчас вы немедленно пытаетесь зарегистрировать rentedCarId, прежде чем HTTP-запрос когда-нибудь вернется. 'this.rentedCarId = id;' вызывается после 'console.log (« ID строки в таблице RentedCars (response): «+ this.rentedCarId); // будет неопределенным! ' – Steveadoo