无法弄清楚以下行为。也不记得曾经遇到类似的事情。我不得不承认我是角度和RxJS的新手,但是嘿!
this.service.getAll().map( r => {
console.log(r) // Array of 40 elements. Fine.
console.log(r.length) // Says "0"!
return r.map( x => x) // What happens here?
}).subscribe( r => {
console.log([]) // That's what an empty array looks like.
console.log(r) // Empty!
})
1)为什么可行数组的长度为零? 2)为什么array.map(x => x)会沉没我亲爱的数组元素?
急切等待提示。
答案 0 :(得分:0)
.map
是一个在observables上用来转换数据的运算符,它也返回一个observable。
我不确定您在控制台中输出的数组是否包含在某个键下...如果它的长度为0,那么它肯定不是数组。您可能需要仔细观察。
您可能会尝试在响应中使用.json()
,这可能会为您提供您期望的实际响应。
r.map( x => x)
在这里没有做任何事情。它是Array.map
,它返回元素而不修改它。
在您的情况下,您不需要在observable上使用.map(),而是可以这样做:
this.service.getAll()
.subscribe( r => {
console.log(r);
// See how r looks like here
})
答案 1 :(得分:0)
行。原问题中的代码很好。我提到的奇怪效果是由我的服务类中的(可能)错误构造引起的,看起来像这样:
getAll(): Observable<MyObject[]> {
let o$ = this.http.post("serviceURL/getAll", "{}")
let newArr = []
o$.subscribe( r => {
let arr = r["payload"] // taking what's of interest
// now create objects not directly conforming to json
for(let i = 0; i < arr.length; i++) {
let json = arr[i]
let newObject = new MyObject()
newObject.parseAndStuff(json)
newArray.push(newObject)
}
})
// Didn't know how to apply the correct rx operators.
return of(newArr)
}
注意在函数作用域中创建新数组并返回其可观察对象,并在闭包中向其添加对象的方法。如果你不像我在原帖中所做的那样触摸事物,这似乎可以工作一次(或更多?)。
尽管如此,我无法解释有趣的行为,但解决了它。随意解释一下!欢呼声。