Observable.next()不是函数

Mat*_*s.h 3 observable rxjs angular

嗨,我是新手。

我不知道为什么无法在Observable中设置新值

我的代码:

resultJob: Observable<any> = Observable.of("PENDING");

ngOnInit() {
    this.resultJob.subscribe(result => {
        result.next("SUCCESS")
        result.complete()
    })
}
Run Code Online (Sandbox Code Playgroud)

此代码返回 result.next is not a function

Phi*_*hil 6

在Observable上没有next();仅在Subject和BehaviorSubject上,后者扩展了Subject(并且都扩展了Observable)。

您需要做的是:

resultJob: Subject<string> = new BehaviorSubject<string>("PENDING");
Run Code Online (Sandbox Code Playgroud)

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

结果也是字符串类型,而不是可观察类型。您要在resultJob而不是result(流中的元素)上调用next()。但是我不明白为什么您要在订阅中这样做。您将以这种方式收到循环调用:您在流中推送了一个新元素,并通过推送另一个元素来响应其检测,依此类推...


Sha*_*ram 5

这是观察者的示例示例。有关组件交互的更多信息,您可以参考此文档组件交互

第 1 步:- app.module.ts

 import { UserService } from './user.service';
 @NgModule({
    providers: [
     UserService
    ]
 })
Run Code Online (Sandbox Code Playgroud)

第 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 });
    }
  }
Run Code Online (Sandbox Code Playgroud)

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

 this.userService.addNewUser({name:'xyz'}); // your data
Run Code Online (Sandbox Code Playgroud)

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

 ngOnInit() {
   this.userService.userAdded$.subscribe(data => {
      console.log(data.user);
    });
 }
Run Code Online (Sandbox Code Playgroud)