可观察对象 `of` 已被弃用。有什么等效替代品?

52

在我的情况下,我有一个访问令牌(token),如果该令牌存在,我将返回一个类型为字符串的可观察对象(observable):

if (this.accessToken){
  return of(this.accessToken);
}

由于最近的更新,我注意到of已被弃用,并附有以下消息:

of已被弃用:请改用scheduled 'scheduled([a, b, c], scheduler)' (deprecation)

新语法相当冗长,有没有人知道同样简单的of的等效scheduled版本?关键字名称使得搜索相关信息变得困难。

谢谢!


你可能导入了错误的 of。请检查你的导入语句。 - user4676340
5个回答

40

15

如上所述,它并没有被弃用。

我想你正在从RxJS v5迁移到RxJS v6。在这种情况下:

像of、map、filter等标准的可观察处理过程

Observable.of(1,2,3).map(x => 2 * x);

变成

import {of, map} from 'rxjs';
import {map} from 'rxjs/operators';

of(1,2,3).pipe(map(x => 2 * x));

点击此处查看更多https://www.learnrxjs.io/concepts/rxjs5-6.html


6

@daniel-hilgarth 是正确的,但是如果你需要模拟of(1, 2, 3),你可以使用以下命令:

import {asapScheduler, scheduled} from "rxjs";
scheduled([1, 2, 3], asapScheduler);

或者
import {asyncScheduler, scheduled} from "rxjs";
scheduled([1, 2, 3], asyncScheduler);

您可以在此处阅读有关ASAP的更多信息:https://rxjs.dev/api/index/const/asapScheduler

5
如果您有调度程序,of(item, scheduler)的等效方法是scheduled([item], scheduler)。如果您已经传递了项目数组,则不需要方括号。

-3
你需要正确地导入。我给你一个参考的例子。
import { map } from 'rxjs/operators';

const httpOptions = {
headers: new HttpHeaders({
  'Content-type':  'application/json'
  })
};

return this.http.post(this.baseUrl + 'login', model, httpOptions).pipe(map((response : any) => {
const user = response.json();
if (user.accessToken){
  localStorage.setItem('token', user.accessToken);
  return user.accessToken;
} }))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接