【问题标题】:What type is the subscriber in Observable.create((subscriber) => { ... }) in angular 2角度 2 中 Observable.create((subscriber) => { ... }) 中的订阅者是什么类型
【发布时间】:2016-02-19 15:48:36
【问题描述】:

我一直在把头发拉出来。有没有人在下面的 Angular 2 typescript 代码块中弄清楚订阅者是什么类型?

let obs: Observable<string> = Observable.create((subscriber) => { ... }) 

【问题讨论】:

    标签: typescript angular rxjs


    【解决方案1】:

    有没有人在下面的 Angular 2 打字稿代码块中弄清楚订阅者是什么类型

    只要可用,它就是next 值。请参阅:http://reactivex.io/documentation/operators/create.htmlonNext 是函数(subscriber)=&gt;。我个人称它为(next)=&gt;

    【讨论】:

      【解决方案2】:

      Create 用于创建具有自定义订阅行为的Observables

      传递给Observable.create 方法的函数定义了订阅 Observable 时应该发生的行为。因此,传入的subscriber 将是一个实现Observer&lt;T&gt; 接口的对象。

      例如,下面的代码会创建一个Observable,当订阅它时,会发出两个值然后完成(对于任何语法错误,提前道歉,我不使用 TypeScript):

      let obs: Observable<string> = Observable.create((subscriber) => { 
        subscriber.next("Hello");
        subscriber.next("World!");
        subscriber.complete();
      });
      
      //Here is a subscriber that we define to subscribe to the Observable
      let sub: Subscriber<string> = Subscriber.create(
                    (x) => console.log(x),
                    null,
                    () => console.log("Done"));
      
      //At this point the method you passed to Observable.create will be invoked
      obs.subscribe(sub);
      
      //Output:
      //Hello 
      //World!
      //Done
      

      请注意,这实际上并没有执行此代码,而是您定义了新订阅者通过调用订阅时将遵循的行为 obs.subscribe(subscriber) 或者有一个功能: obs.subscribe((x) =&gt; console.log(x);

      在许多情况下,没有必要使用create,因为大多数常见事件发射源都有包装器,因此您没有

      【讨论】:

      • 您好,Paul,感谢您的详细解释。但我似乎找不到 Observer 接口。另外我也不知道T会是什么。所以我想我现在必须将观察者保留为“任何”。谢谢您的帮助! ;0) 问候,
      • @Zorthgo Subscriber&lt;T&gt; 实现了Observer&lt;T&gt; 接口。在这种情况下,&lt;T&gt; 将是 string,因为这是您正在使用的类型。
      • 谢谢保罗。但是我能够从 Angular2 库中导入 Observable,但似乎没有任何可以导入的 Observer 对象。
      • 只是为了留下笔记。最后,我找不到 Observer 接口,所以我决定使用 EventEmitter。似乎工作正常。 :)
      • "rxjs": "5.0.0-beta.6", 看来Observer&lt;string&gt; 是正确的类型。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 2021-01-10
      • 2019-03-01
      • 2017-12-16
      • 2018-11-28
      相关资源
      最近更新 更多