你能 return 一个对象数组,每个对象都包含一个来自 forkJoin 的可观察对象吗?
Can you return an array of objects, with each object containing an observable from forkJoin?
let fruit = {
id: 1,
isGood: false
}
假设我有一个函数调用,它接受水果对象的 id 和 returns 一个可解析为布尔值的可观察对象,指示值 isGood 是真还是假。
我想映射一个水果对象数组并调用上述函数,然后使用返回的值在对象上设置 isGood 并在返回的同一对象上设置水果的 ID。
在我看来,我应该可以做这样的事情:
forkJoin(
fruitArray.map(fruit => {
return of({
"data": isFruitGood(fruit.id)),
"id": fruid.id
})
})
).subscribe(result => console.log(result))
这里的问题是返回了一个对象数组,但是对象中数据的可观察集没有解析。
您的问题是您的 forkJoin
正在解包您的 of
可观察对象,而不是您的“数据”中返回的内部可观察对象 属性。
您需要传递 forkJoin
一个为您获取 isFruitGood
值的 observables 数组,然后在它们返回后构建您的对象:
forkJoin(fruitArray.map(
fruit => isFruitGood(fruit.id)
)).pipe(
map(isGoodArray => isGoodArray.map(
(isGood, i) => ({
data: isGood,
id: fruitArray[i].id
})
)
)).subscribe(result => console.log(result))
这是一个示例 StackBlitz
let fruit = {
id: 1,
isGood: false
}
假设我有一个函数调用,它接受水果对象的 id 和 returns 一个可解析为布尔值的可观察对象,指示值 isGood 是真还是假。
我想映射一个水果对象数组并调用上述函数,然后使用返回的值在对象上设置 isGood 并在返回的同一对象上设置水果的 ID。
在我看来,我应该可以做这样的事情:
forkJoin(
fruitArray.map(fruit => {
return of({
"data": isFruitGood(fruit.id)),
"id": fruid.id
})
})
).subscribe(result => console.log(result))
这里的问题是返回了一个对象数组,但是对象中数据的可观察集没有解析。
您的问题是您的 forkJoin
正在解包您的 of
可观察对象,而不是您的“数据”中返回的内部可观察对象 属性。
您需要传递 forkJoin
一个为您获取 isFruitGood
值的 observables 数组,然后在它们返回后构建您的对象:
forkJoin(fruitArray.map(
fruit => isFruitGood(fruit.id)
)).pipe(
map(isGoodArray => isGoodArray.map(
(isGood, i) => ({
data: isGood,
id: fruitArray[i].id
})
)
)).subscribe(result => console.log(result))
这是一个示例 StackBlitz