https://plnkr.co/edit/Rfmcrn9Ef3ABiVGDEZSi?p=preview
在这个简单的例子中,我设置了一个observable和一个订阅者。当我将一个新项目(“拉布拉多猎犬”)推送到数组时,我希望通知订阅者..不是这样的..
我在这里缺少什么?
const dogBreeds = ['hound', 'dachshund', 'Pekingnese', 'Pug', 'Mastiff'];
setTimeout(() => {
dogBreeds.push('Labrador Retriever');
}, 1000);
const dogBreedObservable = Rx.Observable.from(dogBreeds);
const dogBreedSubscriber = dogBreedObservable
.subscribe(
onNext,
function onError(err) {
console.log('Error: ' + err);
},
function onCompleted() {
console.log('no more breeds!');
}
);
function onNext(breed) {
console.log('breed: ' + breed);
console.log(dogBreeds);
}
答案 0 :(得分:0)
您已经创建了一个dogBreeds
的流,就像您还没有添加任何值一样。对dogBreeds
的后续更改不会发出,因为您从未告诉过它。
你应该做的是创建一个主题。由于您需要起始值,因此您可能对BehaviorSubject
感兴趣。您需要做的是发出一个新值,因此对于您的演示,您可能会执行以下操作。
setTimeout(() => {
this.dogBreeds = [...this.dogBreeds, 'new', 'breed']
dogBreedObservable.next(this.dogBreeds)
}, 10)
但是,如果您只想以更类似RxJS的方式进行,您应该考虑使用[scan
]之类的运算符
(http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-scan)保持您想要添加的每个新品种的所有品种的累积值。