简体   繁体   English

Observable.create(...)。map不是函数

[英]Observable.create(…).map is not a function

I just learn Pluralsight - Getting Started with Reactive Programming with RxJS 我只是学习Pluralsight-RxJS反应式编程入门

Why not work? 为什么不工作?

I use RXJS 6.2.0 我使用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')
);

I was doing the same course and was able to solve this using pipe and typing the variable in the parameters of the arrow functions, in the following way: 我在做同样的过程,并且能够使用管道并通过以下方式在箭头函数的参数中键入变量来解决此问题:

...
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)
);
...

Requiring using operators inside of pipe is a recent change on the way RxJs works, so some courses and references may be out of date. 要求在管道内部使用运算符是RxJs工作方式的最新更改,因此某些课程和参考资料可能已过时。

as recommended on comment, you should use pipe now. 根据评论的建议,您现在应该使用管道。

Your code edited : 您的代码已编辑:

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')
);

online sample 在线样本

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM