Я пишу приложение для поиска книг Angular 2, которое взаимодействует с API через сервисы приложения. У меня есть форма для пользователей, чтобы загрузить книги в базу данных на сервере, при отправке запускается функция uploadBook
:
uploadBook(){
//collects form data and uses it to set the value of this.book
this._uploadService.uploadBookToDb(this.book)
.subscribe( res => {
alert('book uploaded');
})
}
В upload.service.ts
:
uploadBookToDb(book){
return this._http.post(environment.apiUrl + '/book_new', JSON.stringify(book))
.map(res => res.json());
}
Это работает нормально, и я получаю ответ от сервера, как обычно. Однако у меня возникают проблемы, когда я пытаюсь найти книгу, когда пользователь печатает:
bookTitle.valueChanges
.debounceTime(1000)
.map(bookTitle => this._uploadService.bookLookUp(bookTitle))
.subscribe(res => update dropdown with results);
В сервисе bookLookup
похож на рабочий uploadBookToDb
выше:
bookLookUp(title){
return this._http.post(environment.apiUrl + '/book_lookup', JSON.stringify(title))
.map(res => res.json());
}
Однако, когда я печатаю в поле названия книги, возвращается само наблюдаемое: Observable {_isScalar: false, source: Observable, operator: MapOperator}
. На сервере не зарегистрировано никаких действий, то есть вызов API в сервисе даже не выполняется вообще.
Я уверен, что я неправильно отображаю наблюдаемое в службу, но не понимаю, как это сделать правильно при работе с асинхронными запросами данных, как в случае valueChanges
. Любая помощь в выяснении этого будет очень приветствоваться.