我有一段代码,如下所示:
getPersons().subscribe(
persons => {
for (const person of persons) {
getAddress(person.id).subscribe(
address => {
person.address = address;
}
);
}
doSomethingWithAddresses();
}
);
问题是 doSomethingWithAddresses 在所有 getAddress 可观察对象完成之前执行。在执行后续代码之前如何确保它们全部完成?
你应该使用 RxJSforkJoin在返回所有可观察值之前等待 for..of 循环完成。
以下是您应该对代码进行的更改:
getPersons().subscribe(
persons => {
const observablesList = [];
for (const person of persons) {
const getAddressObservable = getAddress(person.id);
observablesList.push(getAddressObservable)
}
forkJoin(observablesList).subscribe(response => {
// console.log(response) to check that there is a list of returned observables
const result = persons.map((person, index) => {
person['address'] = response[index]['address'];
return person;
})
doSomethingWithAddresses();
})
}
);
或者,您可以尝试这样做来防止链接subscribe()
getPersons().pipe(
mergeMap(persons => {
const observablesList = [];
for (const person of persons) {
const getAddressObservable = getAddress(person.id);
observablesList.push(getAddressObservable)
}
return observablesList;
})
).subscribe(response => {
// console.log(response) to check that there is a list of returned observables
const result = persons.map((person, index) => {
person['address'] = response[index]['address'];
return person;
})
doSomethingWithAddresses();
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)