'map' не существует для типа 'Observable <Response>' Nativescript - PullRequest
0 голосов
/ 13 июня 2018

Мне нужно получить все свои веб-службы формы аварийных сигналов в Nativescript.Но .map не работает.Я попробовал эту функцию.В Angular 5 работает хорошо, но в Nativescript показывают эту ошибку:

[ts] Свойство 'map' не существует для типа 'Observable'.в этом .map ((response: Response) => {

Я импортирую это: import 'rxjs/add/operator/map'; import { Http, Headers, Response } from '@angular/http';, но ничего не происходит

Мой "rxjs": "~ 6.1.0",

 public AlarmsGetAll(): Observable<Alarm[]> {
    let headers = new Headers();
    headers.append('x-access-token', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyaWQiOnsiVXNlcklEIjoiMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAifSwiaWF0IjoxNTI4ODgzNDU1LCJleHAiOjE1Mjk3NDc0NTV9.qei48rzt1KF9AKIEz8Aq-A8pWkESc1G3jBUfdU27oYE');
    return this.http.get(Api.getUrl(Api.URLS.AlarmsGetAll), {
      headers: headers
    })
      .map((response: Response) => {
        let res = response.json();
         console.log(res)
        if (res.StatusCode === 1) {
        } else {
          return res.StatusDescription.map(alarm => {
            //console.log(alarm)
            return new Alarm(alarm);
          });
        }
      });
  }

Можете ли вы спросить меня, какая проблема?

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Если вы используете rxjs @ 6, вам следует обновить оператора.

Rxjs 5

import 'rxjs/add/operator/map'

myObservable
  .map(yourdata=> yourdata + 15)
  .subscribe(...);

Rxjs 6

import { map } from 'rxjs/operators';

myObservable
  .pipe(map(yourdata=> yourdata + 15))
  .subscribe(...);

Решение в вашем случае:

Поэтому вам нужно обновить импорт и использовать новый способ Rxjs6

import { map } from 'rxjs/operators';

 public AlarmsGetAll(): Observable<Alarm[]> {
    let headers = new Headers();
    headers.append('x-access-token', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyaWQiOnsiVXNlcklEIjoiMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAifSwiaWF0IjoxNTI4ODgzNDU1LCJleHAiOjE1Mjk3NDc0NTV9.qei48rzt1KF9AKIEz8Aq-A8pWkESc1G3jBUfdU27oYE');
    return this.http.get(Api.getUrl(Api.URLS.AlarmsGetAll), {
      headers: headers
    })
      .pipe(map((response: Response) => {
        let res = response.json();
         console.log(res)
        if (res.StatusCode === 1) {
        } else {
          return res.StatusDescription.map(alarm => {
            //console.log(alarm)
            return new Alarm(alarm);
          });
        }
      }));
  }

Если вам нужна дополнительная информация

0 голосов
/ 13 июня 2018

Вот ваш код, модифицированный последней версией rxjs v6 и HttpClientModule (HttpModule устарел начиная с v5):

import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

public AlarmsGetAll(): Observable<Alarm[]> {
let headers = new HttpHeaders();
headers.append('x-access-token', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyaWQiOnsiVXNlcklEIjoiMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAifSwiaWF0IjoxNTI4ODgzNDU1LCJleHAiOjE1Mjk3NDc0NTV9.qei48rzt1KF9AKIEz8Aq-A8pWkESc1G3jBUfdU27oYE');
return this.http.get(Api.getUrl(Api.URLS.AlarmsGetAll), {
  headers: headers,
  observe: 'response'
}).pipe(
  map((response: HttpResponse<any>) => {
    let res = response.json();
     console.log(res)
    if (res.StatusCode === 1) {
    } else {
      return res.StatusDescription.map(alarm => {
        //console.log(alarm)
        return new Alarm(alarm);
      });
    }
  }));
}

Как упоминалось ранее, вы можете проверить руководство по миграции для обновления rxjs v5 до v6 иВот документация для HttpClientModule: Угловая документация http

0 голосов
/ 13 июня 2018

В последней версии NativeScript используются Angular 6 и Rxjs 6.1.0 и выше.Ознакомьтесь с рекомендациями по миграции для перехода от rxjs @ 5 к rxjs @ 6


...