Typescript 使用angular 5进行数据转换的多个http调用
我在angular 5应用程序中进行了几个类似的http调用。我还需要应用类似的数据转换逻辑,并将结果添加到数组中,以便在页面上显示它 第二次呼叫不是强制性的,是有条件的 在http subscribe上,我执行数据转换并将其推送到一个数组中。我尝试使用array concat添加第二次调用的结果,但在页面上没有得到任何结果 最好的方法是什么Typescript 使用angular 5进行数据转换的多个http调用,typescript,http,angular5,rxjs5,Typescript,Http,Angular5,Rxjs5,我在angular 5应用程序中进行了几个类似的http调用。我还需要应用类似的数据转换逻辑,并将结果添加到数组中,以便在页面上显示它 第二次呼叫不是强制性的,是有条件的 在http subscribe上,我执行数据转换并将其推送到一个数组中。我尝试使用array concat添加第二次调用的结果,但在页面上没有得到任何结果 最好的方法是什么 if(oneReq) { this.http.get(url).subscribe ((message: any[]) =>
if(oneReq) {
this.http.get(url).subscribe ((message: any[]) => {
results.push({});
}
return results;
} else {
forkJoin([this.http.get(url), this.http.get(url)]) . subscribe ((message: any[]) => {
results.push({});
}
return results;
}
使用
进行所有调用并等待完成(相当于forkJoin
)Promise.all
用于条件第二次调用defaultIfEmpty
和用于连接这些值的扩展运算符映射
以转换这些ITEAM再次映射
Observable .forkJoin(this.first$, this.second$.defaultIfEmpty([])) .map(([current, added]) => [...current, ...added]) .map(item => transform(item)) .subscribe(array=>{ //do something with array });
http.get
返回的可观察对象不会立即发出。它首先等待http响应,然后执行subscribe
中的代码。它也不会阻止执行。因此,当它等待响应时,它会继续运行并返回结果。当响应最终到达时,subscribe
块运行
这里有一个例子。我模拟了Angular的http。在这里获取,因为将Angular包含在代码段中并不是那么简单:
//Angular的'http.get'返回一个RxJS可观测值
//当http响应通过时,哪个'emit'和'completed'
//所以这模拟了“get”
//使用在500毫秒后发射并完成的可观察对象
consthttp={get:()=>Rx.Observable.of('messages').delay(500)}
常量结果=[]
常量url=''
函数getMessages(){
http.get(url).subscribe(消息=>{
//该区块在500ms后运行
结果:push({});
log('C:',results)//[{}]
})
返回结果;//此代码不会等待500毫秒,它会立即运行
}
const returned=getMessages()
console.log('A:',返回)//[]
console.log('B:',results)//[]
//日志将显示:
//A:[]
//B:[]
//C:[{}]
分享一些示例代码。您使用的是旧的Http
,还是新的HttpClient
?您使用的是承诺
还是可观测
。。。。目前我们还不知道。被否决。我正在使用新的HttpClientModule您正在使用什么更改检测策略?纯代码帖子往往会被标记为低质量并被删除。您能否对此添加一些注释,以便其他人能够理解这是如何解决问题的?因此,第二个请求取决于第一个响应的响应?不,它们是独立的。如果看到您编写的一些代码不起作用,这将非常有帮助。但在我离开工作之前,我忍不住再次尝试一个答案:P更新回答显示两个流之外的条件目前,我使用的是if条件-forkjoin of 2 calls/subscribe,而在else中仅使用http/subscribe。由于某种原因,我无法使用函数格式化响应-我不得不复制逻辑。