2017-02-12 2 views
0

У меня есть две услугзапроса НТТРА возвращает ошибку в 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 приведет к возврату Promise в Observable вместо Observable. Поскольку потребительский код вызывал map, я предполагаю, что было намерено вернуть Observable. Этого можно достичь, используя Observable.fromPromise. Другим способом было бы вернуть Observable непосредственно из службы хранения, но не зная внутренних компонентов этой услуги, вышеуказанный вариант проще.

+0

Использование get (url) заключается в том, чтобы прикрепить значение токена доступа, ive попытался добавить return at return this.storage.get .... но это не позволяет получить HTTP-запрос. Как я могу отформатировать его, чтобы по-прежнему прикреплять токен доступа и все еще выполнять http get –

+0

Я обновил свой ответ, но, пожалуйста, имейте в виду, что он зависит от возвращаемых значений storage.get и нескольких других или некоторых голеней о правильности различных методы, которые вы не включили –

+0

Теперь получите gettinng, что свойство 'flatMap' не существует в типе 'typeof Observable'. –

Смежные вопросы