Map не является функцией (Rxjs), хотя импорт

было много вопросов о том, что "карта не является функцией", но почти все просто не импортировали библиотеку rxjs.

В моем случае, я делаю импорт, но ошибка все еще существует.

Я работаю с Ionic 2, и вот как выглядят мои зависимости package.json:

"dependencies": {
"@angular/common": "2.0.0",
"@angular/compiler": "2.0.0",
"@angular/compiler-cli": "0.6.2",
"@angular/core": "2.0.0",
"@angular/forms": "2.0.0",
"@angular/http": "2.0.0",
"@angular/platform-browser": "2.0.0",
"@angular/platform-browser-dynamic": "2.0.0",
"@angular/platform-server": "2.0.0",
"@ionic/storage": "1.0.3",
"ionic-angular": "2.0.0-rc.1",
"ionic-native": "2.2.3",
"ionicons": "3.0.0",
"rxjs": "5.0.0-beta.12"
}  

Так вот как я создаю свою службу:

import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions, Response } from '@angular/http';
import { Observable } from 'rxjs';
import 'rxjs/add/operator/map';

@Injectable()
export class LoginService {
    constructor(private http: Http) {

    }

    private dataUrl = '/node';

    getData() : any {
        this.http.get(this.dataUrl)
            .map(response => response.json())
            .subscribe(result => console.log(result));
    }
}

Я также попытался переустановить модуль rxjs, но все равно не успел. Может быть, это несовместимо с ионной 2 или текущей версией angular?

Что думают ребята?

Приветствия,

Андрей

Ответ 1

Это 2018. У меня была эта же проблема. Это то, что сработало для меня:

import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

this.http.get(url)
.pipe(map(r => r.json()))
.subscribe(resp => {
  resp = resp.json();
  console.log(resp);
});

Ответ 2

У меня была та же проблема.

Я использую jspm с system.js. Для меня, когда я модернизировал свою систему, используя jspm update angular2 -http required [email protected], но [email protected] требуется [email protected], который затем отображается на "rxjs". Полагаю, это была самая новая версия? Я обнаружил все это, проверив файл config.js, созданный jspm.

Так что, видимо, когда я использовал выражение...

import 'rxjs/add/operator/map';

... он добавлял карту к версии rxjs 5.0.0-beta.12, которая не версия, используемая http. Я должен был изменить линию, чтобы...

import 'npm:[email protected]/add/operator/map'; 

... и затем он сработал.

Ответ 3

создать файл rxjs-operator.ts

// Statics
import 'rxjs/add/observable/throw';
// Operators
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/distinctUntilChanged';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/switchMap';
import 'rxjs/add/operator/toPromise';

и назовите его, если необходимо.

import './rxjs-operators';

Ответ 4

попробуйте

    import {Observable} from 'rxjs/Observable';

getData() : Observable<any> {
        this.http.get(this.dataUrl)
            .map(response => response.json())
            .subscribe(result => console.log(result));
    }

Ответ 5

попробовать

import {Injectable} из '@angular/core'; import {Http, Response, Headers, URLSearchParams, RequestOptions} из '@angular/http'; import {Observable} из 'rxjs/Observable'; import 'rxjs/Rx';

Ответ 6

Пожалуйста, импортируйте карту следующим образом:

import { map } from 'rxjs/operators'; 

вместо 'rxjs/add/operator/map'

Ответ 7

импорт импорта 'rxjs/Rx'; имеет некоторые проблемы с версией 5.5.2, так как для каждого импорта я могу перейти из импорта {Observable} из 'rxjs/Rx' для импорта {Observable} из 'rxjs/Observable';