我有一个存储设置为access_token,当我第一次失败时返回它
提供商:
getLayMinisters(){
console.log(this.access_token);
return this.http.get(
this.api.url() + '/faith-leader/' + 'lay-ministers',
{
headers: new Headers({ "Authorization": "Bearer " + this.access_token })
}
)
.map(
response => response.json()
);
}
这是此文件的构造函数
access_token: any;
layMinister_id: string;
constructor(
public http: Http,
public storage: Storage,
public api: ApiProvider
) {
this.storage.get('access_token').then(
(access_token) => {
this.access_token = access_token;
}
)
}
这是在我的页面中
getLayMinisters(){
this.layMinisterProvider.getLayMinisters().subscribe(
data => {
this.layMinisters = data;
}
);
}
这高于它
layMinisters = [];
constructor(
public navCtrl: NavController,
public navParams: NavParams,
public layMinisterProvider: LayMinisterProvider,
public alertCtrl: AlertController
) {}
ionViewDidLoad() {
this.getLayMinisters();
}
ionViewWillEnter() {
// this.getLayMinisters();
}
当页面首次运行时,它返回 console.log(this.access_token)
返回为 undefined
然后我得到api没有响应的错误 . 但是,当我再次点击链接打开页面时,它运行正常并打印access_token并运行api调用并打印所有数据
1 回答
当你调用getLayMinisters()时,access_token是未定义的,因为这些任务是异步的,所以当你执行http.get时,可能this.storage.get()没有完成因为它是一个promise,如果你在http.get函数中编码
也许用1000ms可能会打印它(它取决于storage.get()promise响应时间) .
要解决它,您可以在layMinisterProvider中创建一个函数:
并在页面中:
请记住,提供者必须将access_token作为公共 .