【发布时间】:2021-12-02 11:39:08
【问题描述】:
我正在尝试处理学生集合,并且对于每个学生调用不同的服务器 api,我该如何组合来自不同 api 的响应?
这里是问题的演示代码:
test4(students:Student[]):Observable<Student[]> {
var rr = students.map(student =>{
if (student.age === 1) {
return this.client
.get('https://api.coindesk.com/v1/bpi/currentprice.json')
.pipe(
map((res) => {
console.log(res);
student.age = student.age * 100;
return [student];
})
);
} else {
return this.client
.get('https://api.coindesk.com/v1/bpi/currentprice.json')
.pipe(
map((res) => {
console.log(res);
student.age = student.age * 10000;
return [student];
})
);
}
});
}
如果可能,我不喜欢使用 forkjoin。
更新
我有这样的源数据
getStudents(): Student[] {
return [{ age: 1 }, { age: 2 }, { age: 3 }];
}
如果年龄=1,则返回1100;如果年龄 >1 则返回 110000;在 *100 或 *10000 之前,它会向不同的 api 发送请求,我在上面的代码中模拟了 http 请求
函数的输入和输出将是test4(students: Student[]): Observable<Student[]>,这意味着最终结果将类似于of([{ age: 100 }, { age: 20000 }, { age: 30000 }])。
我还有另一个函数可以调用test4,如下所示:
test() {
this.test4(this.getStudents())
.pipe(
mergeMap((result) => {
console.log(result);
return of([]);
})
)
.subscribe();
}
它会记录类似[{ age: 100 }, { age: 20000 }, { age: 30000 }]
【问题讨论】:
标签: angular typescript rxjs observable