Как сделать вызов API с данными из асинхронного потока данных (наблюдаемый)? - PullRequest
0 голосов
/ 31 августа 2018

Я пишу приложение для поиска книг 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. Любая помощь в выяснении этого будет очень приветствоваться.

1 Ответ

0 голосов
/ 31 августа 2018

Вы должны подписаться на наблюдаемое, возвращаемое bookLookUp(title) .. где-то.

Не уверен насчет точной версии, но если вы используете 5+, используйте HttpClient вместо полного Http и удалите .map(res => res.json()); - это больше не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...