我需要能够一个接一个地执行3个可观察变量,以便可以在第二个中使用第一个结果,在第三个中使用第一个和第二个结果。
这样的事情(由于serviceId在第三个请求中不可见,因此不起作用):
private setupStuff(): void {
this.initRouteParams().pipe(
switchMap(serviceId => this.getFileInfo(serviceId)),
switchMap(fileName => this.getExistingFile(serviceId, fileName)
.subscribe(response => {
console.log(response);
}))
);
}
最佳答案
您可以将serviceN的值显式返回给serviceN + 1。这是个主意:
private setupStuff() {
this.initRouteParams()
.pipe(
switchMap(serviceId => {
return zip(of(serviceId), this.getFileInfo(serviceId))
}),
switchMap(([serviceId, filename]) => {
return zip(of(serviceId), of(filename), this.getExistingFile(serviceId, filename))
})
)
.subscribe(([serviceId, filename, response]) => {
console.log(serviceId, filename, response);
})
}
编辑:
您可以通过显式声明每个输入的类型来修复类型错误。您可能想为
response
分配适当的类型。