无法理解Rxjs

时间:2018-05-22 05:31:20

标签: rxjs

到目前为止,我对Rxjs所了解的是Observable是一个流,我们可以使用Observer {{1}来“推送”流中的新值} 方法。然后我订阅流来接收值。但我无法理解管道是如何工作的。例如。

我可以创建一个next作为

Observable

然后我可以做

var observable = Rx.Observable.of('foo', 'bar');
  1. 上面创建观察者的位置和方式?
  2. 谁在调用var subscription = observable.subscribe(x=>console.log(x)) 来推送流中的值?
  3. 我认为next是观察者,但它没有x=>console.log(x) 方法。上面的代码如何工作?
  4. 这是另一个例子。下面,我传递next并使用其observer方法推送值,但我从未创建next(具有下一个方法的对象)。

    observer

1 个答案:

答案 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方法。