为什么.map(()=> x + 3)vs .map((x)=> x +3)产生两种不同的结果?
请参阅下面的代码段。我有以下代码 app.component.ts
obs = Observable.of(1, 2, 3, 4);
ngOnInit() {
this.usingMapToMakeInnerObservable();
}
usingMapToMakeInnerObservable() {
this.obs
.map(x => Observable.timer(500).map(() => x + 3)) // A. Output 4, 5, 6, 7
//.map(x => Observable.timer(500).map((x) => x + 3)) // B. Output 3, 3, 3, 3
.subscribe(
x => console.log(x),
err => console.error(err),
() => console.log('done completed')
);
}
答案 0 :(得分:3)
在第一种情况下
.map(x => //here x value can be `1, 2, 3, 4`
Observable.timer(500).map(() => x + 3) // x will hold from last map
)
在上面的代码中,第一个x可以保存值1, 2, 3, 4
,然后我们应用Observable.timer
。之后在.map
x中将有当前的数组项。
第二种情况
.map(x => //here x value can be `1, 2, 3, 4`
Observable.timer(500).map((x) => x + 3) //x here it has own x so
)
在上面的代码中,第一个地图x值可以保存1, 2, 3, 4
个值。当我们为x
Observable声明timer
时。现在x
将不再是父地图的x
值。那么你必须经常Output: 3,3,3,3
。原因是当我们没有向timer
(Observable)提及任何其他参数时,它每次都会返回0
。