从对象创建可观察

时间:2019-02-23 17:46:04

标签: angular typescript rxjs observable

如何从该对象创建一个Observable?

this.localStorage.getItem('user').subscribe((user) => {
      if (user != null) {
        console.log(user);
        console.log('User existiert!');

        // Create Observable
        this.data = new Observable((observer: any) => {
          observer.next(user);
          observer.complete();
        });

        return this.data;

      }
    });

用户对象如下:

enter image description here

我将此内容写入了服务,但是从组件进行订阅无法正常工作。有什么问题?

1 个答案:

答案 0 :(得分:1)

您需要在服务方法中返回一个可观察的对象,并使组件调用该方法以获取可观察的对象。

正如jonrsharpe已经提到的那样,您不需要创建另一个可观察的对象。如果要对数据进行转换或使用console.log,只需使用map / tap运算符。

import { map } from 'rxjs/operators';
import { LocalStorage } from '@ngx-pwa/local-storage@6';

class Service {

  constructor(private localStorage: LocalStorage) {}

  // this is the naive approach
  getUser() {
    return new Observable((observer) => {
      this.localStorage.getItem('user').subscribe((user) => {
        if (user != null) {
          console.log(user);
          console.log('User existiert!'); 
        }
        observer.next(user);
        observer.complete();
      });
    });
  }

  // this is a better approach
  getUser() {
    return this.localStorage.getItem('user').pipe(
      map((user) => {
        if (user != null) {
          console.log(user);
          console.log('User existiert!');
        }
        return user
      }),
    );
  }
}
相关问题