Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 可观察。创建(…)。映射不是函数_Javascript_Typescript_Rxjs - Fatal编程技术网

Javascript 可观察。创建(…)。映射不是函数

Javascript 可观察。创建(…)。映射不是函数,javascript,typescript,rxjs,Javascript,Typescript,Rxjs,我刚刚学习了Pluralsight-开始使用RxJS进行反应式编程 为什么不工作 我使用RXJS 6.2.0 从'rxjs'导入{Observable}; 常量数=[1,5,10]; const source=observatable.create(observator=>{ 设指数=0; 让produceValue=()=>{ 下一步(数字[index++]); 如果(索引n*2) .过滤器(n=>n>4); source.subscribe( value=>console.log(`valu

我刚刚学习了Pluralsight-开始使用RxJS进行反应式编程

为什么不工作

我使用RXJS 6.2.0

从'rxjs'导入{Observable};
常量数=[1,5,10];
const source=observatable.create(observator=>{
设指数=0;
让produceValue=()=>{
下一步(数字[index++]);
如果(索引<编号.长度){
设置超时(produceValue,2000);
}否则{
observer.complete();
}
};
produceValue();
}).map(n=>n*2)
.过滤器(n=>n>4);
source.subscribe(
value=>console.log(`value:${value}`),
e=>console.log(`error:${e}`),
()=>console.log('complete')
);

根据评论中的建议,您现在应该使用管道

您的代码已编辑:

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')
);
从'rxjs'导入{Observable};
从“rxjs/operators”导入{map,filter};
常量数=[1,5,10];
const source=observatable.create(observator=>{
设指数=0;
让produceValue=()=>{
下一步(数字[index++]);
如果(索引<编号.长度){
设置超时(produceValue,2000);
}否则{
observer.complete();
}
};
produceValue();
}).pipe(映射(n=>n*2),过滤器(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)
);
...
。。。
让源=可观察。创建(观察者=>{
设指数=0;
让produceValue=()=>{
下一步(数字[index++]);
如果(索引<编号.长度){
setTimeout(produceValue,250);
}否则{
observer.complete();
}
}
produceValue();
}).烟斗(
映射((n:number)=>n*2),
过滤器((n:number)=>n>4)
);
...

要求在管道内部使用操作符是RxJs工作方式的最新变化,因此一些课程和参考可能已经过时。

Observable.create()
返回一个
Observable
,而不是数组。在v6中,您将需要使用pipable操作符,或者需要在
RxJs
旁边安装
RxJs compat
。看。另外,使用
newobservable
比使用
Observable.create
更可取。在angular/typescript中,使用RxJs 6+,您必须调用map函数的通用版本。map(n=>n*2)对不起,我不明白你们想解释什么,我的样品有什么可以改进的?谢谢你们两位@Yanis git请在
地图
后添加更新答案。如果没有它,将生成错误:[ts]算术运算的左侧必须是“any”、“number”或枚举类型。欢迎使用StackOverflow。虽然此代码可能会回答该问题,但提供有关此代码为什么和/或如何回答该问题的附加上下文可提高其长期价值。