2017-02-12 82 views
0

我有两个服务自定义HTTP请求返回一个错误在angular2

Http client service 

get(url):any{ 
    this.storage.get('token').then((name) => { 
    let headers = new Headers(); 
    this.createGeneralHeaders(headers); 
    return this.http.get(url+"?access-token="+name, { 
     headers: headers 
    }); 

}); 

后来才知​​道有这个

constructor(private _httpClient:HttpClient){} 

    getTrucks():Observable<any>{ 
    return this._httpClient.get(this.trucksurl+"phone-trucks") 
     .map(res => res.json().data) //returns an error 

    } 

第二个服务返回无法读取的不确定

+0

请正确设置您的代码。 –

+0

Ive格式化它 –

回答

0
属性映射错误

您的get(url)方法不会返回任何内容。这就是你遇到这个问题的原因。

另外请注意,您应该被指定any类型。如果你让它推断返回类型为void,但是你指定返回类型为any,那么编译器就会发现这个错误,因为它没有理由将类型推断过程短路。

我意识到很多角度的例子都是这样做的,但这些例子并不是很好的TypeScript代码的例子。

假设在第一个服务http是官方角2 HTTP服务的引用,你会想是

import {Observable} from 'rxjs/Observable'; 
import 'rxjs/add/observable/fromPromise'; 
import 'rxjs/add/operator/mergeMap'; 

export class HttpClient { 
    get(url: string) { 
    const headers = new Headers(); 
    this.createGeneralHeaders(headers); 

    return Observable 
     .fromPromise(this.storage.get('token')) 
     .flatMap(
     name => this.http.get(`${url}?access-token=${name}`, {headers}) 
    ); 
    } 
} 

在原密码,get不返回任何东西,并更新其返回结果then调用将导致它返回PromiseObservable而不是Observable。由于消费代码正在呼叫map我假定其意图是返回Observable。这可以通过使用Observable.fromPromise来实现。另一种方法是直接从存储服务中返回Observable,但不知道该服务的内部,上述选项更简单。

+0

get(url)的使用是附加访问令牌值,我试图在返回this.storage.get ....时添加返回值,但是这不能执行get http请求。我如何格式化它仍然附加访问令牌,并仍然执行http获取 –

+0

我更新了我的答案,但请记住,它取决于storage.get的返回值以及其他一些关于各种正确性的小括号你还没有包括的方法 –

+0

现在我得到一个错误,即'typeof Observable'类型中不存在Property'flatMap'。 –