在Ionic 3(angular4)中进行开发时,我遇到了一个问题。我只是在Ionic重做一个以前写过的角度应用程序,但问题开始了,因为我决定使用Ionic"存储"而不是" localStorage"。
问题是由微小的差异造成的,在本地存储中," get" methd只返回一个值,但是Ionic的存储" get" method返回一个promise。
现在,我需要一个从存储中读取特定值并返回它的函数,由于某些原因,我无法容纳我想要使用此值的承诺。
有没有办法在get方法上获得类似的localStorage行为?
getAccessToken()
{
return this._storage.get('bdAccessToken');
}
getAuthorizationOptions(){
let token = this._authService.getAccessToken();
let header = new Headers({
'Authorization': 'Bearer '+ token
});
let ro = new RequestOptions({
headers: header
});
let options = new RequestOptions();
if (options.headers) options.headers.delete("Authorization");
options.headers = header;
return options;
}
get(url:string, options?:RequestOptions):Observable<Response>
{
return super.get(url, this.getAuthorizedOptions())
.catch(err => {
console.log("shit 1");
console.log(err);
if (err && err.status === 401){
console.log("401 here...");
return this._authService.refreshToken()
.flatMap(r =>
super.get(url, this.getAuthorizedOptions())
)
.catch(err2 => {
this.redirect();
return Observable.throw(err2);
});
}
else {
return Observable.throw(err);
}
});
}
答案 0 :(得分:1)
您不能将异步接口用作同步接口。这是根本的。您必须使用该接口重写代码的一部分,以便异步操作。
如果您有权访问async/await
,最简单的方法就是
// OLD
function getStuff() {
const stuff = get('stuff');
return stuff + 1;
}
// NEW
async function getStuff() {
const stuff = await getAsync('stuff');
return stuff + 1;
}
当然,getStuff
现在是异步的,因此使用它的代码也可能需要更改。
由于某些原因,我无法容纳我想要使用此值的承诺。
我无法想象这些原因是什么。任何形式的代码
const value = getValue();
doSomethingWithValue(value);
始终可以重写为
const valueP = getPromiseForValue();
valueP.then(value => doSomethingWithValue(value));