我知道在subsribe内还有其他一些用于调用订阅的帖子,但是我找不到解决方法。
我在内部调用subscribe,我知道它不能正常工作。 console.log以随机顺序打印 head 。例如S1具有H1,S2作为H2,S3作为H3。当前程序有时会打印S1,S3,S2,有时会打印S2,S3,S1。
期望状态的头部被顺序打印。我该如何实现?
GetStates(countryID).subscribe(
data => {
let states = JSON.parse(data);
states.forEach(
entry => {
GetHeadOfState(entry.ID).subscribe(
head => {
console.log(head)
}
)
}
)
})
答案 0 :(得分:1)
有多种方法可以执行此操作,但是如果您想要的状态实际上是一个数组,则可以先解压缩该数组(使用concatAll
/ mergeAll
),然后在其上调用concatMap
每个州。 concatMap
运算符将为每个项目运行,并等待其完成:
GetStates(countryID).pipe(
map(data => JSON.parse(data)),
concatAll(),
concatMap(state => GetHeadOfState(state.ID)),
).subscribe(headOfState => ...);
答案 1 :(得分:0)
您可以在此处使用mergeMap
/ mergeAll
运算符
getStatesAndCountry(countryID) {
let states = GetStates(countryID);
return states.pipe(
mergeMap(map(state) => GetHeadOfState(state.ID))
)
}
this.getStatesAndCountry(countryId).subscribe(
value => console.log(val)
)