为什么在尝试执行请求 Observable 时会返回它?
Why is it returned when trying to execute the request Observable?
我是 rxjs 的新手,正在尝试执行两个请求。当我尝试查看结果时,我得到了 Observable。
copy() {
const obj = {};
this.create(skill)
.pipe(
mergeMap((res) => {
return [res, forkJoin(this.levels.map((level) => this.level(level)))];
}),
)
.subscribe((res) => {
console.log(res);
});
}
level(level) {
return this.create(level);
}
输出:
创造技能的对象,
可观察的 {_isScalar: false, _subscribe: ƒ}
我能正常收到第一个请求的响应,而第二个请求以“Observable”的形式出现。
ForkJoin 可能不是这里的最佳运算符。我建议看看 operator decision tree。不过我相信你想要这样的东西?
copy() {
const obj = {};
forkJoin(
[
this.create(skill),
...this.levels.map((level) => this.level(level))
]
).subscribe((res) => {
console.log(res);
});
}
level(level) {
return this.create(level);
}
我不完全确定我明白你想做什么:-)
您传递给 mergeMap()
的函数应该“通常”return 是一个可观察的。目前,您正在 return 创建一个数组。
- 当您 return
array
时,mergeMap
将简单地发射每个数组元素;这就是为什么您会收到这两个发射 created skill
、Observable
.
- 但是,如果您 return
Observable
,mergeMap
将订阅它并发出。
我认为这个可能适合你:
copy() {
this.create(skill).pipe(
mergeMap(createdSkill => forkJoin(this.levels.map(l => this.level(l))).pipe(
map(createdLevels => ([createdSkill, createdLevels]))
)
)
.subscribe(
([skill, levels]) => console.log({skill, levels})
);
}
如果我们把它分解成更小的块,可能更容易理解:
createLevels() {
return forkJoin(this.levels.map(l => this.level(l));
}
copy() {
this.create(skill).pipe(
mergeMap(createdSkill => createLevels()).pipe(
map(createdLevels => ([createdSkill, createdLevels]))
)
)
.subscribe(
([skill, levels]) => console.log({skill, levels})
);
}
这样看来,我们似乎可以用更简单的方式构建 copy()
方法:
copy(skill) {
forkJoin(
this.createSkill(skill),
this.createLevels()
)
.subscribe(
([skill, levels]) => console.log({skill, levels})
);
}
我是 rxjs 的新手,正在尝试执行两个请求。当我尝试查看结果时,我得到了 Observable。
copy() {
const obj = {};
this.create(skill)
.pipe(
mergeMap((res) => {
return [res, forkJoin(this.levels.map((level) => this.level(level)))];
}),
)
.subscribe((res) => {
console.log(res);
});
}
level(level) {
return this.create(level);
}
输出: 创造技能的对象, 可观察的 {_isScalar: false, _subscribe: ƒ}
我能正常收到第一个请求的响应,而第二个请求以“Observable”的形式出现。
ForkJoin 可能不是这里的最佳运算符。我建议看看 operator decision tree。不过我相信你想要这样的东西?
copy() {
const obj = {};
forkJoin(
[
this.create(skill),
...this.levels.map((level) => this.level(level))
]
).subscribe((res) => {
console.log(res);
});
}
level(level) {
return this.create(level);
}
我不完全确定我明白你想做什么:-)
您传递给 mergeMap()
的函数应该“通常”return 是一个可观察的。目前,您正在 return 创建一个数组。
- 当您 return
array
时,mergeMap
将简单地发射每个数组元素;这就是为什么您会收到这两个发射created skill
、Observable
. - 但是,如果您 return
Observable
,mergeMap
将订阅它并发出。
我认为这个可能适合你:
copy() {
this.create(skill).pipe(
mergeMap(createdSkill => forkJoin(this.levels.map(l => this.level(l))).pipe(
map(createdLevels => ([createdSkill, createdLevels]))
)
)
.subscribe(
([skill, levels]) => console.log({skill, levels})
);
}
如果我们把它分解成更小的块,可能更容易理解:
createLevels() {
return forkJoin(this.levels.map(l => this.level(l));
}
copy() {
this.create(skill).pipe(
mergeMap(createdSkill => createLevels()).pipe(
map(createdLevels => ([createdSkill, createdLevels]))
)
)
.subscribe(
([skill, levels]) => console.log({skill, levels})
);
}
这样看来,我们似乎可以用更简单的方式构建 copy()
方法:
copy(skill) {
forkJoin(
this.createSkill(skill),
this.createLevels()
)
.subscribe(
([skill, levels]) => console.log({skill, levels})
);
}