Angular 在继续之前,如何等待多个可能的观察值中的一个返回
我有一个switch语句,它根据输入进行不同的http调用 它看起来像这样:Angular 在继续之前,如何等待多个可能的观察值中的一个返回,angular,rxjs,observable,angular-http,Angular,Rxjs,Observable,Angular Http,我有一个switch语句,它根据输入进行不同的http调用 它看起来像这样: switch(myObject.type){ case 'Type1': myObject.name = this.service1.getName(myObject.id); break; case 'Type2': myObject.name = this.service2.getName(myObject.id); break;
switch(myObject.type){
case 'Type1':
myObject.name = this.service1.getName(myObject.id);
break;
case 'Type2':
myObject.name = this.service2.getName(myObject.id);
break;
case 'Type3':
myObject.name = this.service3.getName(myObject.id);
break;
}
紧接着,我有一条语句来保存条目:
this.storageService.saveEntry(myObject);
但是在保存条目时,它没有设置name属性
保存条目之前,等待这些异步调用中的任何一个返回的正确方法是什么?如果必须使用switch语句,可以让每个分支返回可观察的,然后在
subscribe()中设置myObject.name
或利用和开关映射等运算符将值传递给this.storageService.saveEntry()
foo():可观察{
开关(myObject.type){
案例“类型1”:
返回此.service1.getName(myObject.id);
打破
案例“类型2”:
返回此.service2.getName(myObject.id);
打破
案例“类型3”:
返回此.service3.getName(myObject.id);
打破
}
}
bar(){
foo()
.do(name=>myObject.name=name)
.switchMap(name=>this.storageService.saveEntry(myObject))
.subscribe(response=>console.log(response);
}
希望这能有所帮助!利用Observable.forkjoin()
forkjoin()等待多个观察值,这里我正在寻找许多可能的观察值中的一个。@ChrisLang我已经更新了答案,以利用RxJS运算符设置myObject.name
的值,并使用switchMap
将值传递给另一个观察值。希望这能有所帮助!
foo(): Observable<any> {
switch(myObject.type){
case 'Type1':
return this.service1.getName(myObject.id);
break;
case 'Type2':
return this.service2.getName(myObject.id);
break;
case 'Type3':
return this.service3.getName(myObject.id);
break;
}
}
bar() {
foo()
.do(name => myObject.name = name)
.switchMap(name => this.storageService.saveEntry(myObject))
.subscribe(response => console.log(response);
}