Карта свойств не существует по типу Observable <ArrayBuffer> - PullRequest
0 голосов
/ 13 мая 2018

Я пытался обновить Angular v4 до Angular v6.Я заменял Http и HttpModule на HttpClient и HttpClientModule.Поэтому я импортировал HttpClient из @angular/common/http в службе и пытался получить результаты из API DBpedia. Раньше я использовал Http из @angular/http, и мой следующий код работал нормально

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import {Jsonp, Headers, RequestOptions, URLSearchParams} from "@angular/http";
import {Store} from "@ngrx/store";
import * as fromRoot from '../reducers';
import {Observable} from "rxjs";

@Injectable()
export class KnowledgeapiService {

  server = 'http://lookup.dbpedia.org';
  searchURL = this.server + '/api/search/KeywordSearch?';
  homepage = 'https://susper.com';
  logo = '../images/susper.svg';

  constructor(
    private http: HttpClient,
    private jsonp: Jsonp,
    private store: Store<fromRoot.State>
  ) {}

  public getsearchresults(searchquery){
    let params = new URLSearchParams();

    params.set('QueryString', searchquery);

    let headers = new Headers({ 'Accept': 'application/json' });
    let options:any = new RequestOptions({ headers: headers, search: params });

    return this.http
      .get(this.searchURL, options).map(res =>

        res.json()

      ).catch(this.handleError);
  }

  private handleError (error: any) {
    // In some advance version we can include a remote logging of errors
    let errMsg = (error.message) ? error.message :
      error.status ? `${error.status} - ${error.statusText}` : 'Server error';
    console.error(errMsg); // Right now we are logging to console itself
    return Observable.throw(errMsg);
  }
}

но теперь, когда я мигрировал из Http зависимости в HttpClient, в функции getsearchresults(searchquery) всякий раз, когда я использую map данные отображения функции в json, выдается ошибка, что функция map не существует для типа Observable<ArrayBuffer>.Дальнейшее удаление функции map выдает то же сообщение для функции catch.Я перешел по этой ссылке https://github.com/angular/angular/issues/15548, но приведенное в нем решение не работает для меня. Где я не прав?Должен ли я удалить функции map и catch в getsearchresults(searchquery).

1 Ответ

0 голосов
/ 13 мая 2018

В основном вы сталкиваетесь с проблемами с types.Приведенный выше машинописный код не соответствует.Например, для функции getsearchresults() тип не определен.Тип не определен в this.http.get<NoTypeDefinedHere>

Далее httpClient дает ответ json по умолчанию. И let headers = new Headers({ 'Accept': 'application/json' }); здесь может не понадобиться.

Проверьте, используете ли вы модуль http или* Модуль 1011 * в импорте.

Проверьте, правильно ли вы импортировали rxjs/add/operator/map

...