【发布时间】:2016-02-19 15:48:36
【问题描述】:
我一直在把头发拉出来。有没有人在下面的 Angular 2 typescript 代码块中弄清楚订阅者是什么类型?
let obs: Observable<string> = Observable.create((subscriber) => { ... })
【问题讨论】:
标签: typescript angular rxjs
我一直在把头发拉出来。有没有人在下面的 Angular 2 typescript 代码块中弄清楚订阅者是什么类型?
let obs: Observable<string> = Observable.create((subscriber) => { ... })
【问题讨论】:
标签: typescript angular rxjs
有没有人在下面的 Angular 2 打字稿代码块中弄清楚订阅者是什么类型
只要可用,它就是next 值。请参阅:http://reactivex.io/documentation/operators/create.htmlonNext 是函数(subscriber)=>。我个人称它为(next)=>
【讨论】:
Create 用于创建具有自定义订阅行为的Observables。
传递给Observable.create 方法的函数定义了订阅 Observable 时应该发生的行为。因此,传入的subscriber 将是一个实现Observer<T> 接口的对象。
例如,下面的代码会创建一个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) => console.log(x);
在许多情况下,没有必要使用create,因为大多数常见事件发射源都有包装器,因此您没有
【讨论】:
Subscriber<T> 实现了Observer<T> 接口。在这种情况下,<T> 将是 string,因为这是您正在使用的类型。
"rxjs": "5.0.0-beta.6", 看来Observer<string> 是正确的类型。