`subscriber` 对象只是 `observer` 对象的包装器吗
Is `subscriber` object just a wrapper for the `observer ` object
在下面的代码中,new Observable(function(subscriber)
中匿名函数调用中的subscriber
对象是observer
对象的包装器吗?
const observer = {
next: (data: any) => console.log('Observer got a next value: ', data),
error: (err: any) => console.error('Observer got an error: ' + err),
complete: () => console.log('Observer got a complete notification'),
};
const observable = new Observable(function(subscriber) {
subscriber.next(1);
subscriber.next(2);
subscriber.next(3);
setTimeout(() => {
subscriber.next(4);
subscriber.complete();
}, 1000);
});
observable.subscribe(observer);
subscriber
in function(subscriber) {...}
是在observable
上调用subscribe
方法时调用的函数的参数名。
一步步来看
首先像这样创建 Observable
new Observable(function(subscriber) {...})
你正在做的是将一个函数传递给构造方法。该函数存储在您创建的 observable
实例中。
然后你像这样在上面创建的可观察对象上调用 subscribe
函数
observable.subscribe(observer)
你在这里做的是让observable
执行构造时传递的函数,参数值为observer
。 observer
在这种情况下是 Observer
.
类型的对象
观察者和订阅者是同一类型的对象(在打字稿中它们具有相同的接口)。
正在代码中定义观察者。订阅者是一个参数。
考虑
a: number = 10;
对比 function(b:number){...
我们知道 a
的值,但是 b
在调用函数之前没有具体的值。事实上,您可以使用 a
中的值调用此函数。 a
不会像这样包装 b
。
在下面的代码中,new Observable(function(subscriber)
中匿名函数调用中的subscriber
对象是observer
对象的包装器吗?
const observer = {
next: (data: any) => console.log('Observer got a next value: ', data),
error: (err: any) => console.error('Observer got an error: ' + err),
complete: () => console.log('Observer got a complete notification'),
};
const observable = new Observable(function(subscriber) {
subscriber.next(1);
subscriber.next(2);
subscriber.next(3);
setTimeout(() => {
subscriber.next(4);
subscriber.complete();
}, 1000);
});
observable.subscribe(observer);
subscriber
in function(subscriber) {...}
是在observable
上调用subscribe
方法时调用的函数的参数名。
一步步来看
首先像这样创建 Observable
new Observable(function(subscriber) {...})
你正在做的是将一个函数传递给构造方法。该函数存储在您创建的 observable
实例中。
然后你像这样在上面创建的可观察对象上调用 subscribe
函数
observable.subscribe(observer)
你在这里做的是让observable
执行构造时传递的函数,参数值为observer
。 observer
在这种情况下是 Observer
.
观察者和订阅者是同一类型的对象(在打字稿中它们具有相同的接口)。
正在代码中定义观察者。订阅者是一个参数。
考虑
a: number = 10;
对比 function(b:number){...
我们知道 a
的值,但是 b
在调用函数之前没有具体的值。事实上,您可以使用 a
中的值调用此函数。 a
不会像这样包装 b
。