到目前为止,我对Rxjs
所了解的是Observable
是一个流,我们可以使用Observer
{{1}来“推送”流中的新值} 方法。然后我订阅流来接收值。但我无法理解管道是如何工作的。例如。
我可以创建一个next
作为
Observable
然后我可以做
var observable = Rx.Observable.of('foo', 'bar');
var subscription = observable.subscribe(x=>console.log(x))
来推送流中的值? next
是观察者,但它没有x=>console.log(x)
方法。上面的代码如何工作?这是另一个例子。下面,我传递next
并使用其observer
方法推送值,但我从未创建next
(具有下一个方法的对象)。
observer
答案 0 :(得分:1)
(1)上面创建观察者的位置和方式
订阅时创建Observer。您提供Observer作为subscribe方法的参数。例如以下内容:
var subscription = observable.subscribe(
{
next: x=>console.log(x),
error: e=>console.log(e),
complete: ()=>console.log('completed')
}
)
subscribe方法也直接接受Observer的一个或所有方法。例如以下内容:
var subscription = observable.subscribe(x=>console.log(x))
以上是以下的语法糖:
var subscription = observable.subscribe(
{
next:x=>console.log(x)
}
)
(2)谁在旁边调用推送值?
next
方法调用存在于创建Observable的代码中(参见下文)。订阅后(这意味着您已将Observer作为subscribe方法的参数提供),将执行以下代码。请注意,以下代码中使用的Observer是您订阅时提供的代码。此处调用next
方法,您在Observer中定义了该方法。
var myObservable = Rx.Observable.create(observer => {
observer.next('foo');
setTimeout(() => observer.next('bar'), 1000);
});
myObservable.subscribe(value => console.log(value));
(3)我认为x => console.log(x)是一个观察者,但它没有下一个方法。以上代码如何运作?
正如我之前解释的那样,您在此处提供的是观察者的next
方法。