在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML5  網(wǎng)絡(luò)安全/ httpclient.subcribe不返回結(jié)果(請(qǐng)求以經(jīng)401),導(dǎo)致一直在l

httpclient.subcribe不返回結(jié)果(請(qǐng)求以經(jīng)401),導(dǎo)致一直在loading

圖片描述
圖片描述

回答
編輯回答
孤星

你代碼寫的有問題,網(wǎng)絡(luò)請(qǐng)求是異步的。應(yīng)該在獲取數(shù)據(jù)后才設(shè)置loading的值。

this.loading=true;
this.login.subscribe(
   success =>{
     this.loading=false;
},
   error=>{
     this.loading=false;
}
);
2017年1月18日 17:08
編輯回答
孤島

你的login()這個(gè)方法寫的有問題,
首先你return的errorMesg肯定是null,http請(qǐng)求是異步的,你在return的時(shí)候,請(qǐng)求未必已經(jīng)完成了。
所以你的login方法應(yīng)該返回observable,這樣你就可以在login的訂閱中設(shè)置loading狀態(tài),或者其他的功能。

所以login方法應(yīng)該這樣寫:

private errorMsg = null;

login(user: User): Obserable<string> {
   return this.http.post<User>(url: ..., formData).map((data: any) => {
       if (data) {
          ....
       }
       return null;
   });
}

然后在submit方法里面這樣調(diào)用

submit() {

.....
this.loading = true;
this.login(user)
   .finally(() => this.loading = false) //finally方法,不管成功或error都會(huì)設(shè)置loading為false
   .subscribe(
    (msg: any)=>  { this.errorMsg = null; },
    (error: Error) = { this.errorMsg = "用戶名或密碼不正確"; }
);
}
2017年3月29日 08:16