Observable.next()不是一个函数

时间:2018-04-30 11:23:03

标签: angular rxjs observable

嗨,我是棱角分明的新人。

我不知道为什么我不能在我的Observable中设置新值

我的代码:

error: expected 'logs (POD | TYPE/NAME) [CONTAINER_NAME]'.
POD or TYPE/NAME is a required argument for the logs command

此代码返回resultJob: Observable<any> = Observable.of("PENDING"); ngOnInit() { this.resultJob.subscribe(result => { result.next("SUCCESS") result.complete() }) }

2 个答案:

答案 0 :(得分:5)

Observable没有next();仅限于Subject和BehaviorSubject,它扩展了Subject(并且都扩展了Observable)。

您需要做的是:

resultJob: Subject<string> = new BehaviorSubject<string>("PENDING");

与Subject相比,BehaviorSubject使用在流中推送的第一个值进行初始化。这似乎是你想要做的。

结果是字符串类型,而不是Observable类型。您想在resultJob上调用next(),而不是在结果(流内的元素)上调用。但我不明白为什么你在订阅中这样做。您将以这种方式获得循环调用:您在流中推送一个新元素,并通过推送另一个元素来对其进行反应等等......

答案 1 :(得分:3)

这里是观察者的示例。有关组件交互的更多信息,请参阅此文档Component interaction

  

第1步: - app.module.ts

 import { UserService } from './user.service';
 @NgModule({
    providers: [
     UserService
    ]
 })
  

第2步: -   的 user.service.ts

import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';

@Injectable()
export class UserService {
    users: any = null;
    nativeWindow: any;
    private userAddedSource = new Subject<any>();
    userAdded$ = this.userAddedSource.asObservable();

    addNewUser(user) {
      this.userAddedSource.next({ user: user });
    }
  }
  

第3步: - 在您的组件中添加此代码以发送数据

 this.userService.addNewUser({name:'xyz'}); // your data
  

第4步: - 在您的接收器组件上

 ngOnInit() {
   this.userService.userAdded$.subscribe(data => {
      console.log(data.user);
    });
 }