所以我喜欢forkJoin,基本上是Promise.all的替代品,但我无法想象如何将它作为动态列表提供,如:
Observable.forkJoin(
this.http.get('/app/books.json').map((res:Response) => res.json()),
this.http.get('/app/movies.json').map((res:Response) => res.json())
).subscribe(
data => {
this.books = data[0]
this.movies = data[1]
},
err => console.error(err)
);
只是我需要在运行时创建http.gets(URL将不同,生成的目标和总URL都是动态的),尝试传递配置对象,但它不喜欢它... < / p>
tx用于阅读,
肖恩。
答案 0 :(得分:4)
forkJoin将第一个参数作为
args(Arguments | Array):Observable序列或Promises的数组或参数,用于收集最后的元素。
所以,你可以简单地传递一个observable数组。 Here is a plunker
let observables = [
this.http.get('/app/books.json').map((res:Response) => res.json()),
this.http.get('/app/movies.json').map((res:Response) => res.json())
];
Observable.forkJoin(observables).subscribe(
data => {
this.books = data[0]
this.movies = data[1]
},
err => console.error(err)
);
答案 1 :(得分:0)
我来到这里是为了寻找一种方法来识别一组动态组合的 observables 的结果。如果我传递一个 observables 数组,我不知道哪个结果会出现在哪个索引处,因为数组中 observables 的数量和顺序是未知的。
从 RxJS 6.5+ 开始,你可以将一个对象而不是一个数组传递给 ForkJoin,其中键将标识 observable,键的值是 observable(称为字典)。
// use some logic to dynamically assemble dictionary
const dictionary = {};
if (shouldGetBooks) {
dictionary.books = this.http.get("/app/books.json");
}
if (shouldGetMovies) {
dictionary.movies = this.http.get("/app/movies.json");
}
forkJoin(dictionary).subscribe((results) => {
console.log(results); // { books: booksJson, movies: moviesJson }
});
现在可以通过密钥轻松识别结果。