Observable.zip 不是函数

Posted

技术标签:

【中文标题】Observable.zip 不是函数【英文标题】:Observable.zip is not a function 【发布时间】:2017-10-15 14:54:09 【问题描述】:

VM95422:27 原始异常: WEBPACK_IMPORTED_MODULE_3_rxjs_Observable.

尝试了各种导入

// import 'rxjs/add/operator/zip';
// import 'rxjs/add/observable/zip-static';
// import 'rxjs/add/operator/zip';
import 'rxjs/operator/zip';

尝试这样使用它:

const zippedUsers: Observable<User[]> = Observable.zip<User>(this.usersObservable);

Angular 4,TypeScript 2.1.6

package.json:

"rxjs": "^5.1.0",

【问题讨论】:

import "rxjs/add/observable/zip"; reactivex.io/rxjs/manual/installation.html 您能否考虑更改已接受的答案,因为它对于最近的 RxJS 版本不再正确? 【参考方案1】:

也许像

import Observable from "rxjs/Observable";
import "rxjs/add/observable/zip";

然后是这样的:

Observable.zip(this.someProvider.getA(), this.someProvider.getB())
        .subscribe(([a, b]) => 
            console.log(a);
            console.log(b);
        );

【讨论】:

【参考方案2】:

5.5 rxjs:

import zip from "rxjs/observable/zip";
const zippedUsers: Observable<User[]> = zip(this.usersObservable);

【讨论】:

我花了 90 多分钟试图找到这个解决方案。我从谷歌找到的材料或文档都没有帮助。但你的回答确实如此。【参考方案3】:

RxJS 6

从 RxJS 6 开始...

Observable creation functions

from()fromPromise()of()zip()应该这样导入:

import  from, fromPromise, of, zip  from 'rxjs';

并用作普通函数调用:

const data: Observable<any> = fromPromise(fetch('/api/endpoint'));

Pipeable operators

应该像这样导入:

import  map, filter, scan  from 'rxjs/operators';

并用作pipe() 方法参数:

const someObservable: Observable<number> = ...;
const squareOddVals = someObservable.pipe(
        filter((n: number) => n % 2 !== 0),
        map(n => n * n))
    .subscribe((n: number): void => ...);

【讨论】:

问题明确提到了 rxjs 5,所以这并没有提供问题的答案。 @IngoBürk:我相信 RxJS 5 只是 OP 在询问时(超过 2 年前)使用的版本。如今,我认为如果这个问题与当前版本的库保持同步对社区更有利,特别是考虑到这是谷歌搜索该问题的首要问题。 @IngoBürk:另外,通知 this 答案提供了与 RxJS 5.5 相关的信息,这也是比 OP 要求的更高版本。但是已经半年没有人抱怨了:) @AlexanderAbakumov 非常感谢:从接受的答案导入在更新 6->7 后停止工作,从 'rxjs' 导入 Observable ;作品

以上是关于Observable.zip 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 如何将数据传递给 ObservedObject 函数

使用大量 if-else 语句和 JSON 化简化 PL/pgSQL 函数

IOS RxSwift 从 Observable 数组创建 Observable 数组

ObservableCollection 列表找不到方法 AddRange

从 ngOnInit 调度操作时的 ExpressionChangedAfterItHasBeenCheckedError

RxJS之转化操作符 ( Angular环境 )