Angular 在继续之前,如何等待多个可能的观察值中的一个返回

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语句,它根据输入进行不同的http调用

它看起来像这样:

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);
}