【发布时间】:2020-12-01 10:50:50
【问题描述】:
我们做了一些可观察的之后
let observable = new Observable(observer => {
let x = 5;
if (x == 15) {
observer.error('something went wrong');
} else {
observer.next('produce some value');
}
observer.complete();
});
从观察者那里订阅这三个回调函数有不同的方式。
observable.subscribe(
function next(data) {
console.log(data);
},
function error(err) {
console.log(err);
},
function complete() {
console.log('done');
}
)
或者用箭头函数代替function关键字
observable.subscribe(
x =>
{
console.log(x);
},
err =>
{
console.log(err);
},
() =>
{
console.log('done');
},
这两种方式都有效 - 所以在订阅方法的最后,我们以三种方式结束 从观察者那里获取值的函数。
但是当我写例子时
observable.subscribe({
next: (data) => console.log(data),
error: (err) => console.log(err),
complete: () => console.log('done')
})
它仍在工作。但我不明白它是如何工作的,因为这里我们有三个功能 在一个物体内。在前面的两个示例中,我们直接使用了三个函数。
我的问题是当函数被“包装”在一个对象中时它是如何以及为什么工作的?
【问题讨论】:
-
订阅方法就是这么写的。它接受最多 3 个回调或像您一样实现的对象。两种方法是等价的。
-
好的 quentin,感谢您的反馈。如何在 subscribe 方法的后台看到实现?
-
你通常可以在你的 node_modules 中检查类型定义。就我而言,它位于 node_modules/rxjs/internal/Observable.d.ts 中,然后搜索“subscribe”。但是如果你想查看源代码,去查看github仓库github.com/ReactiveX/rxjs/blob/master/src/internal/…