我正在使用@ angular/http進行http調用(Observable)和NativeStorage庫,這是Promise的存儲機制。這就是爲什麼我使用FromPromise將Promise funtion「NativeStorage.getItem(」xxx「)」轉換爲Observable。Observable中的Promise Error not calling catch
我甚至不確定這是否是一種很好的做法,並且鏈條在行「console.log(」HIT SUCCESSFULLY「);」並停止執行代碼。
由於存儲中沒有名爲「externalAccessToken」的項,因此在Promise中捕獲異常爲null是正常的,但我不明白爲什麼它在此之後會停止執行。直到現在,我試圖返回除null以外的其他內容,並使用導致「未處理的Promise拒絕」錯誤的「Promise.reject()」。
我如何才能讓執行的代碼,然後點擊可觀測
public getExternalAccessTokenFromStorage(): Observable<any> {
let externalAccessTokenPromise = NativeStorage.getItem('externalAccessToken');
let getExternalAccessTokenFromStorage: Observable<any> = Observable.fromPromise(externalAccessTokenPromise.then(x => x)
.catch(() => {
console.log("HIT SUCCESSFULLY");
return null
}));
return getExternalAccessTokenFromStorage.map(x => {
console.log("NOT HIT AT ALL");
return x;
}).catch(() => {
console.log("NOT HIT AT ALL");
return null;
});
}
public getUserInfo(): Observable<StoredUserModel> {
//Get External Access Token From LocalStorage
return this.getExternalAccessTokenFromStorage().flatMap((x: IExternalAccessTokenBindingModel) => {
return this.getAccessTokenFromStorage().flatMap((accessToken: AccessTokenModel) => {
console.log("NOT HIT AT ALL");
let headers = new Headers();
headers.append("Authorization", "Bearer " + accessToken.access_token);
headers.append("Content-Type", "application/json");
let options = new RequestOptions({ headers: headers });
var externalBindingModel = JSON.stringify(x);
return this.http.post(this.baseUrl + '/api/Account/ExternalUserInfo', externalBindingModel, options).map((res: Response) => {
//ADD USER INTO NATIVESTORAGE
this.addUserIntoStorage(res.json());
return res.json();
});
});
}).catch(x => {
return this.getAccessTokenFromStorage().flatMap((accessToken: AccessTokenModel) => {
console.log("NOT HIT AT ALL");
let headers = new Headers();
headers.append("Authorization", "Bearer " + accessToken.access_token);
let options = new RequestOptions({ headers: headers });
return this.http.get(this.baseUrl + '/api/Account/UserInfo', options).map((res: Response) => {
//ADD USER INTO NATIVESTORAGE
let user: StoredUserModel = res.json();
this.addUserIntoStorage(res.json());
return user;
});
}).catch(error => {
return null;
});
});
}
修訂問題的捕捉功能:
我已刪除Promise.catch並保持Observable.catch爲了趕未處理的異常在可觀察;
public getExternalAccessTokenFromStorage(): Observable<any> {
let externalAccessTokenPromise = NativeStorage.getItem('externalAccessToken');
let getExternalAccessTokenFromStorage: Observable<any> = Observable.fromPromise(externalAccessTokenPromise);
return getExternalAccessTokenFromStorage.map(x => {
return x;
}).catch(() => {
return null;
});
}
我得到以下錯誤;
爲什麼不使用'Observable.catch'而不是'Promise.catch',即將錯誤處理移出'fromPromise'? – jonrsharpe
我試過了,它會拋出類似「未處理的錯誤」:item null異常。如果你想我可以產生並寫出確切的錯誤 – mctuna
是的,請給出一個[mcve]沒有任何多餘的細節。 – jonrsharpe