![](/img/trans.png)
[英]Does the parameter of Observable.create() function have to define explicitely an observer?
[英]Observable.create(…).map is not a function
我只是學習Pluralsight-RxJS反應式編程入門
為什么不工作?
我使用RXJS 6.2.0
import {Observable} from 'rxjs';
const numbers = [1, 5, 10];
const source = Observable.create(observer => {
let index = 0;
let produceValue = () => {
observer.next(numbers[index++]);
if (index < numbers.length) {
setTimeout(produceValue, 2000);
} else {
observer.complete();
}
};
produceValue();
}).map(n => n * 2)
.filter(n => n > 4);
source.subscribe(
value => console.log(`value: ${value}`),
e => console.log(`error: ${e}`),
() => console.log('complete')
);
我在做同樣的過程,並且能夠使用管道並通過以下方式在箭頭函數的參數中鍵入變量來解決此問題:
...
let source = Observable.create(observer => {
let index = 0;
let produceValue = () => {
observer.next(numbers[index++]);
if (index < numbers.length) {
setTimeout(produceValue, 250);
} else {
observer.complete();
}
}
produceValue();
}).pipe(
map((n: number) => n * 2),
filter((n: number) => n > 4)
);
...
要求在管道內部使用運算符是RxJs工作方式的最新更改,因此某些課程和參考資料可能已過時。
根據評論的建議,您現在應該使用管道。
您的代碼已編輯:
import {Observable} from 'rxjs';
import {map, filter} from 'rxjs/operators';
const numbers = [1, 5, 10];
const source = Observable.create(observer => {
let index = 0;
let produceValue = () => {
observer.next(numbers[index++]);
if (index < numbers.length) {
setTimeout(produceValue, 2000);
} else {
observer.complete();
}
};
produceValue();
}).pipe(map<number, number>(n => n * 2),filter(n => n > 4)); // Here we pipe operators, you can provide any number of operators. or chain many pipe.
source.subscribe(
value => console.log(`value: ${value}`),
e => console.log(`error: ${e}`),
() => console.log('complete')
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.