我从服务器获取的数据有麻烦。我需要检查用户名是否可用,然后执行http.get,这没问题,我需要以可观察的方式返回http.get的内容,以便稍后创建对象。
registerUser(user: RegisterComponent): Observable<any> {
let headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');
let exists = this.http.get(this.url + "verifyCuentaUsuarioApp.php?cuenta=" + user.cuentaUser + "&id=" + user.passUser);
exists.subscribe(response => {
if (response != null) {
//console.log("this is the message "+response.mensaje);
if (response.data[0].estatus == "0") {
console.log("disponible");
//I need the content of this request to be returned
this.http.get(this.url + 'registroClienteApp.php?' + params, { headers: headers });
} else
console.log("no disponible");
}
});
return this.http.get(this.url + 'registroClienteApp.php?' + params, { headers: headers });
}
答案 0 :(得分:1)
需要返回一个Observable吗?首先不要订阅而不是订阅Observable,然后使用任何扁平化的rxjs运算符,例如:
this.http.get(// first request here).pipe(
mergeMap((dataFromFirstRequest) => {
if (dataFromFirstRequest suits requirement for second request) {
return this.http.get(// second http request)
} else {
return of(false); // return a falsy data indicating second request wasn't needed
}
})
)
答案 1 :(得分:0)
基本上,您需要将第一个http调用返回的可观察值展平,然后根据某些逻辑切换到下一个http调用(filter
可以帮助您)。 switchMap
是可以为您提供帮助的运营商之一,它被认为是mergeMap
的更安全的默认设置,并且仅维护一个内部订阅(就像您的情况一样)。我为您创建了一个StackBlitz演示。