[英]Wait response for http.get()
我正在嘗試使用angular 2和ionic 2做一個登錄函數。此函數將驗證用戶是否通過php服務器在數據庫上被鎖住並返回用戶id。但是http.get()以異步形式工作,因此我無法比較用戶是否存在於數據庫中,因為函數的返回未定義。 我嘗試了兩種方法,使用可觀察的和承諾的:
通過觀察,調用該服務的函數:
login()
{
this.usuario = this.loginservice.get_usuario(this.loginusuario).subscribe(response =>this.usuario = response);
console.log(this.usuario);
}
服務代碼:
public get_usuario(usuario):Observable<any>
{
return this.http.get(this.urlusuario +"/"+ usuario.usuario +"/"+
usuario.senha);
}
這樣,當我第一次單擊觸發login()函數的按鈕時,會得到未定義的值作為響應。 第二次單擊時,它將返回上一個請求的值。
使用promise,調用服務的函數:
login()
{
this.usuario = this.loginservice.get_usuario(this.loginusuario);
console.log(this.usuario);
}
服務代碼:
public get_usuario(usuario):Promise<any>
{
var resultado;
return this.http.get(this.urlusuario +"/"+ usuario.usuario +"/"+ usuario.senha).toPromise().then(function(data){
return data;
});
}
使用promise,我會在首次執行登錄功能時獲得id返回,但是我找不到任何方法來訪問__zone_symbol__value,該值是根據console.log()
控制台響應存儲對象的位置
我想知道是否有一種方法可以等待http.get()響應繼續執行程序(在使用observable的情況下),或者如何訪問promise所返回的對象
在調用服務的代碼中,您需要預訂可觀察對象,並在預訂內部的調用后執行任何您想發生的事情。
您也不要在此處設置this.usuario = this.loginservice.get_usuario...
你設置this.usario為等於Observable
的,而不是響應Observable
。
login()
{
this.loginservice.get_usuario(this.loginusuario).subscribe(response => {
this.usuario = response;
console.log(this.usuario);
});
}
這樣,當我第一次單擊觸發login()函數的按鈕時,會得到未定義的值作為響應。 第二次單擊時,它將返回上一個請求的值。
發生這種情況是因為您在執行console.log
沒有等待訂閱完成。 第二次單擊時,它返回上一個請求的值,因為出於相同的原因,它不等待訂閱完成,因為console.log
不在訂閱中,但是在第二次單擊時,第一個請求確實完成了。 因此,在第一個console.log
之后設置了this.loginusuario
。
在函數中使用async
並在調用promise中await
async login()
{
await this.usuario = this.loginservice.get_usuario(this.loginusuario);
console.log(this.usuario);
}
$ http.get函數返回Promise,因為.get()方法發送異步ajax請求。 要對變量寫入響應,您需要執行以下操作:
login () {
var self = this;
this.http.get('/url/').then(response => {
self.usuario = response;
// It will write response from server to your variable when the
// request will be done
}).catch(error => /*Your error handler*/);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.