【发布时间】:2017-01-22 18:39:49
【问题描述】:
我正在努力处理从我的应用程序的本地存储中异步检索数据,该应用程序是用 Angular2/ionic2 编写的。
我的代码如下:
request(args) {
var headers = new Headers();
headers.append('Content-Type', 'application/json');
// Retrieve the token from the local storage, if available
this.storage.get('token').then((value) => {
headers.append('Authorization', 'Token ' + value);
});
args = args || {};
var url = this.API_URL + args.url;
var method = args.method;
var data = args.data || {};
var options = new RequestOptions({headers: headers, withCredentials: this.use_session});
return new Promise((resolve,reject) => {
if (method == 'GET') {
this.http.get(url, options)
.map(res => res.text())
.subscribe(
(data:any) => {
resolve(data);
},
(err:any) => {
data = {};
data['status'] = 0;
data['non_field_errors'] = ["Could not connect to server. Please try again."];
data['error'] = err;
reject();
},
() => {
}
);
}
});
}
调用请求函数的代码如下:
authenticationStatus(){
return this.request({
'method': "GET",
'url': "/user/"
})
.then((data:any) => {
console.log('****** authenticationStatus: GET /user/ SUCCESS');
});
}
这又是这样调用的:
this.djangoAuth.authenticationStatus()
.then((data:any) => {
this.loggedIn = true;
this.enableMenu(true);
this.root = PhotoPage;
},
(err:any)=>{
this.loggedIn = false;
this.enableMenu(false);
this.root = LoginPage;
});
我很难理解嵌套的 Promise,并且无法弄清楚如何修改上面的代码,以便 this.storage.get("token") 调用的结果在下面的代码中使用之前将数据添加到标题中。我认为我需要以某种方式链接承诺,但无法确定具体如何。
【问题讨论】:
-
本地 localStorage 访问是同步的...不知道为什么你的被包装在一个承诺中
-
这不是原生的,它是 angularjs/ionic
-
都是使用原生javascript的框架
-
是的,但是他们的本地存储版本使用了 Promise,而我正在使用的是他们的版本
标签: angularjs asynchronous typescript