首页 文章

Observable <ArrayBuffer>类型上不存在属性映射

提问于
浏览
0

我试图从Angular v4更新到Angular v6 . 我正在将 HttpHttpModule 替换为 HttpClientHttpClientModule . 所以我在一个服务中从 @angular/common/http 导入了 HttpClient ,并试图从DBpedia的API获得结果 . 早先我从 @angular/http 使用 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时,它会给出 Observable<ArrayBuffer> 函数在 Observable<ArrayBuffer> 类型上不存在的错误 . 进一步删除 map 函数为 catch 函数提供相同的消息 . 我按照这个链接https://github.com/angular/angular/issues/15548但是它提供的解决方案对我不起作用 . 我在哪里错了?我应该删除 getsearchresults(searchquery) 中的 mapcatch 功能 .

1 回答

  • 1

    基本上你面临 types 的问题 . 上面的打字稿代码不一致 . 例如,没有为 getsearchresults() 函数定义类型 . this.http.get<NoTypeDefinedHere> 中未定义任何类型

    进一步 httpClient 默认提供json响应 . 此处可能不需要 let headers = new Headers({ 'Accept': 'application/json' }); .

    检查您是否在导入时使用 http 模块或 httpClient 模块 .

    检查您是否正确导入 rxjs/add/operator/map

相关问题