【问题标题】:create is deprecated: use new Observable() instead - usage with pipe and debounceTimecreate 已弃用:改用 new Observable() - 与 pipe 和 debounceTime 一起使用
【发布时间】:2020-05-15 22:09:29
【问题描述】:

我已经升级了我的 Angular 应用程序并且 tslint 给出了以下错误:

create 已弃用:改用 new Observable()

它抱怨的代码:

this.subs$ = Observable.create((observer: any) => {
        observer.next(this.edited.code);
    }).pipe(
        debounceTime(defaultInputDebounceTime),
        mergeMap((searchTerm: string) => this.getStrings(searchTerm))
    );

我曾尝试使用new Observable() 表单,但它遇到了 debounceTime 问题。我在这里错过了什么?

this.subs$ = new Observable((observer: any) => {
        observer.next(this.edited.code);
    }).pipe(
        debounceTime(defaultInputDebounceTime), // <- gives error
        mergeMap((searchTerm: string) => this.getStrings(searchTerm))
    );

错误 TS2345 (TS) 类型“MonoTypeOperatorFunction”的参数不可分配给 键入“操作员功能”。 类型“Observable”不可分配给类型“Observable”。 类型“未知”不能分配给类型“字符串”。

rxjs 6.5.2

更新

在用of() 替换Observable.create() 后,它仍然抱怨不兼容的类型:

TS2345 (TS) 类型“MonoTypeOperatorFunction”的参数不可分配给类型参数 '操作员功能'。类型 'Observable' 不可分配给类型 “可观察”。 键入'字符串 | undefined' 不能分配给类型 'string'。 类型“未定义”不可分配给类型“字符串”。

我的变量的类型是:

this.edited.code: string | undefined;
subs$: Observable<ListData[]> | undefined;

【问题讨论】:

  • 他们已经更新了 api,尝试使用 of 操作符而不是 new Observable。 learnrxjs.io/learn-rxjs/operators/creation/of
  • of 不能替代new Observable,这是合法的。
  • @maxime1992 有点像,如果创建中唯一的东西是.next,或者我错过了什么
  • 在这种情况下,of 是他尝试将值包装到可观察对象中的方式,他不需要保持流打开或进行任何类型的 清理。但是,如果您想将 Web 套接字包装到 ex 的 observable 中怎么办?然后您使用new Observable,因为您可以管理值、错误和拆卸(取消订阅流时,停止 ws for ex)。所以不,of 绝对不是new Observable 的替代品......但在这种情况下就足够了:)
  • @maxime1992 对 :) 这就是我的意思,但你的评论绝对属于这里!

标签: angular typescript rxjs


【解决方案1】:

你最好用of():

of(this.edited.code).pipe(
  debounceTime(defaultInputDebounceTime),
  mergeMap((searchTerm: string) => this.getStrings(searchTerm))
);

您在 tsconfig.json 中使用了 strict: true 标志。这意味着它不喜欢你说searchTerm 是mergeMap 中的一个字符串,因为它也可以是未定义的。您可以更新您的of 以反映此of(this.edited.code || ''),或更新您的mergeMap 输入:mergeMap((searchTerm: string | undefined)

【讨论】:

    猜你喜欢
    • 2019-08-27
    • 2018-06-01
    • 2016-10-06
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 2020-04-07
    相关资源
    最近更新 更多