Лучший способ импортировать Observable из rxjs

В моем угловом 2 приложении у меня есть служба, которая использует class Observable из библиотеки rxjs .

 import { Observable } from 'rxjs'; 

На данный момент я просто использую Observable чтобы использовать toPromise() .

Я читаю в другом вопросе StackOverflow где-то, что импорт таким образом, а также импорт из rxjs/Rx будет импортировать из библиотеки rxjs много ненужных вещей, что увеличит время загрузки страницы и / или базу кода.

Мой вопрос: каким образом можно импортировать Observable чтобы я мог использовать toPromise() без необходимости импорта всего остального?

    Rxjs v 6 *

    Он упростился с более новой версией rxjs.

    1) Операторы

     import {map} from 'rxjs/operators'; 

    2) Другие

     import {Observable,of, from } from 'rxjs'; 

    Вместо цепочки мы должны трубить. Например

    Старый синтаксис:

     source.map().switchMap().subscribe() 

    Новый синтаксис:

     source.pipe(map(), switchMap()).subscribe() 

    Примечание. Некоторые операторы имеют изменение имени из-за конфликтов имен с зарезервированными словами JavaScript! К ним относятся:

    do -> tap ,

    catch -> catchError

    switch -> switchAll

    finally -> finalize


    Rxjs v 5. *

    Я пишу этот ответ частично, чтобы помочь себе, поскольку я постоянно проверяю документы каждый раз, когда мне нужно импортировать оператора. Дайте мне знать, если что-то можно сделать лучше.

    1) import { Rx } from 'rxjs/Rx' ;

    Это импортирует всю библиотеку. Тогда вам не нужно беспокоиться о загрузке каждого оператора. Но вам нужно добавить Rx. Я надеюсь, что встряхивание деревьев будет оптимизировать и выбрать только нужные funcionts (необходимо проверить). Как упоминалось в комментариях, дрожание деревьев не может помочь. Таким образом, это не оптимизировано.

     public cache = new Rx.BehaviorSubject(''); 

    Или вы можете импортировать отдельных операторов.

    Это позволит оптимизировать ваше приложение, чтобы использовать только те файлы :

    2) import { _______ } from 'rxjs/_________';

    Этот синтаксис обычно используется для основного объекта, например, самого Rx или Observable и т.

    Ключевые слова, которые можно импортировать с помощью этого синтаксиса

      Observable, Observer, BehaviorSubject, Subject, ReplaySubject 

    3) import 'rxjs/add/observable/__________';

    Обновление для углового 5

    С Угловым 5, который использует rxjs 5.5.2+

     import { empty } from 'rxjs/observable/empty'; import { concat} from 'rxjs/observable/concat'; 

    Обычно они сопровождаются наблюдением напрямую. Например

     Observable.from() Observable.of() 

    Другие такие ключевые слова, которые можно импортировать с помощью этого синтаксиса:

     concat, defer, empty, forkJoin, from, fromPromise, if, interval, merge, of, range, throw, timer, using, zip 

    4) import 'rxjs/add/operator/_________';

    Обновление для углового 5

    С Угловым 5, который использует rxjs 5.5.2+

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

    Обычно они появляются в streamе после создания Observable. Подобно flatMap в этом fragmentе кода:

     Observable.of([1,2,3,4]) .flatMap(arr => Observable.from(arr)); 

    Другие ключевые слова, использующие этот синтаксис:

     audit, buffer, catch, combineAll, combineLatest, concat, count, debounce, delay, distinct, do, every, expand, filter, finally, find , first, groupBy, ignoreElements, isEmpty, last, let, map, max, merge, mergeMap, min, pluck, publish, race, reduce, repeat, scan, skip, startWith, switch, switchMap, take, takeUntil, throttle, timeout, toArray, toPromise, withLatestFrom, zip 

    FlatMap : flatMap – это псевдоним для mergeMap поэтому нам нужно импортировать mergeMap для использования flatMap .


    Примечание для импорта /add :

    Нам нужно импортировать только один раз в целом проекте. Поэтому он посоветовал сделать это в одном месте. Если они включены в несколько файлов, и один из них будет удален, assembly завершится ошибкой по неверным причинам.

    Обновление для RxJS 6 (апрель 2018 года)

    Теперь совершенно нормально импортировать непосредственно из rxjs . (Как видно из Углового 6+). Импорт из rxjs/operators также прекрасен, и на самом деле больше невозможно импортировать операторов по всему миру (одна из основных причин реорганизации rxjs 6 и новый подход с использованием протокола). Благодаря этому теперь можно использовать трэшинг.

    Пример кода из rxjs repo:

     import { Observable, Subject, ReplaySubject, from, of, range } from 'rxjs'; import { map, filter, switchMap } from 'rxjs/operators'; range(1, 200) .pipe(filter(x => x % 2 === 1), map(x => x + x)) .subscribe(x => console.log(x)); 

    Обратная совместимость для rxjs <6?

    Команда rxjs выпустила пакет совместимости на npm, который в значительной степени устанавливает и воспроизводит. При этом весь ваш код rxjs 5.x должен работать без каких-либо проблем. Это особенно полезно сейчас, когда большинство зависимостей (то есть модhive для Angular) еще не обновлены.

    Единственное, что я усвоил, это непротиворечивость

    Следите за перемещением:

      import { BehaviorSubject } from "rxjs"; 

    с

      import { BehaviorSubject } from "rxjs/BehaviorSubject"; 

    Это, вероятно, будет работать просто отлично, если вы попытаетесь передать объект другому classу (где вы сделали это другим способом), а затем это может потерпеть неудачу

      (myBehaviorSubject instanceof Observable) 

    Он терпит неудачу, потому что цепочка прототипов будет другой, и она будет ложной.

    Я не могу притворяться, что понимаю, что происходит, но иногда я сталкиваюсь с этим и должен перейти к более длинному формату.

    Interesting Posts

    Как заставить Google Chrome соблюдать настройки Windows DPI?

    R – изображение матрицы пикселей?

    Что вызывает ответ Ajax, например: for (;;); {json data} ‘означает?

    Как получить доступ к переменным экземпляра в движке CoffeeScript внутри шаблона Slim

    Почему 08 не является допустимым целым литералом в Java?

    Как избежать дублирования столбцов после присоединения?

    В чем разница между Linq и потомками XML и элементами

    Почему все пользовательские агенты браузеров начинаются с «Mozilla /»?

    Swift – Как преобразовать String в Double

    Может ли новая батарея разрядиться, если не используется

    Могу ли я полагаться на malloc, возвращающий NULL?

    Как я могу определить, содержит ли замкнутый путь заданную точку?

    Почему == сравнения с Integer.valueOf (String) дают разные результаты для 127 и 128?

    Зачем заключать блоки кода C в фигурные скобки?

    Как использовать Assert для проверки того, что было выбрано исключение?

    Давайте будем гением компьютера.