gpt4 book ai didi

angular - 从 rxjs 导入 Observable 的最佳方式

转载 作者:太空狗 更新时间:2023-10-29 16:46:01 25 4
gpt4 key购买 nike

在我的 Angular 2 应用程序中,我有一项服务使用 rxjs 库中的 Observable 类。

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 保留字的名称冲突而更改了名称!这些包括:

-> tap,

catch -> catchError

switch -> switchAll

finally -> finalize


Rxjs v 5.*

我写这个答案的部分原因是为了帮助自己,因为每次我需要导入 operator 时,我都会不断检查文档。让我知道是否可以做得更好。

1) 从'rxjs/Rx'导入{Rx};

这将导入整个库。那么你就不用担心加载每个 operator 了。但是你需要附加 Rx。 我希望 tree-shaking 会优化并只选择需要的功能(需要验证) 正如评论中提到的,tree-shaking 无济于事。所以这不是优化的方式。

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

或者您可以导入个别运算符。

这将优化您的应用以仅使用这些文件:

2) 从 'rxjs/________' 导入 { _______ };

此语法通常用于主要对象,如 Rx 本身或 Observable 等,

可以使用此语法导入的关键字

 Observable, Observer, BehaviorSubject, Subject, ReplaySubject

3) 导入 'rxjs/add/observable/__________';

Angular 5 更新

使用 rxjs 5.5.2+ 的 Angular 5

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

这些通常直接与 Observable 一起使用。例如

Observable.from()
Observable.of()

可以使用此语法导入的其他此类关键字:

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

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

Angular 5 更新

使用 rxjs 5.5.2+ 的 Angular 5

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

这些通常在 Observable 创建后出现在流中。就像这段代码中的 flatMap 一样:

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

平面 map :flatMapmergeMap 的别名,因此我们需要导入 mergeMap 才能使用 flatMap


/add 导入的注意事项:

我们只需要在整个项目中导入一次。所以建议在一个地方做。如果它们包含在多个文件中,并且其中一个被删除,构建将因错误原因而失败。

关于angular - 从 rxjs 导入 Observable 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42376972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com