У меня есть некоторые проблемы. В моей регистрации я хочу просмотреть сообщение об ошибке, если пользователь уже существует в базе данных. Поэтому я создал переменную serverAnswer, которая будет обрабатывать ответ об ошибке с сервера.Angular2 - обновление переменной после функции (обещание?)
Моего register.service.ts содержания
@Injectable()
export class RegisterService {
constructor(private http: Http) {}
public serverAnswer: Object;
getAnswer() {
return this.serverAnswer;
}
addUser(user: User) {
var headers = new Headers();
headers.append('Content-type', 'application/json');
this.http.post('/users/register', JSON.stringify(user), {headers: headers})
.subscribe(
response => {
if(response.json().success) {
window.location.href = "/";
}
if(response.json().error) {
this.serverAnswer = response.json();
}
}
)
}
}
Как вы можете видеть, в начале в "serverAnswer" переменная пуста. Ошибка «response.json().» Обрабатывает текст ошибки. Хорошо, теперь пришло время показать мой контент register.component.ts.
export class RegisterComponent {
constructor(private http: Http, private registerService: RegisterService) {}
serverAnswer: Object;
onSubmit(userName: string, userPassword: string, userEmail: string) {
this.registerService.addUser(new User(userName, userPassword, userEmail))
this.serverAnswer = this.registerService.getAnswer();
}
}
Проблема заключается в том, что «systemAnswer» из RegisterService был обновлен до выполнения функции AddUser была сделана. В результате, если этот пользователь уже существует в базе данных, то в первый раз «systemAnswer» пуст и во второй раз обрабатывает текст response.json().
Это место:
this.registerService.addUser(new User(userName, userPassword, userEmail))
this.serverAnswer = this.registerService.getAnswer();
Что я должен сделать, чтобы обновить переменную serverAnswer только тогда, когда функция AddUser делается?
Благодарим за помощь!
Эй, спасибо за ваш ответ. У меня проблема 'Property 'subscribe' не существует в типе 'void''. Думаю, мне нужно импортировать некоторый модуль rxjs? – elzoy
вам нужно подписаться на контроллер. Думаю, я обновил ответ. – dfsq
Теперь подписка работает, но 'TypeError: this.http.post (...). Map не является функцией' – elzoy