我正在尝试在离子存储中获取2个值存储,但是该值以异步方式重新执行,并且在重新执行值之前发生请求
此处Auth,url处于离子存储
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import 'rxjs/add/operator/map';
import {Headers} from '@angular/http';
import { Storage } from '@ionic/storage';
/*
Generated class for the SeasonService provider.
See https://angular.io/docs/ts/latest/guide/dependency-injection.html
for more info on providers and Angular 2 DI.
*/
@Injectable()
export class SeasonService {
Auth;
url;
constructor(public http: Http, public storage: Storage) {
console.log('Inside SeasonService constructor');
this.storage.get('Auth').then((Auth) => {
console.log('Retrived Auth is', Auth);
this.Auth = Auth;
} );
this.storage.get('url').then((url) => {
console.log('Retrived url is', url);
this.url = url;
} );
}
public getSeasonList() {
console.log('Season Auth is', this.Auth);
console.log('Season url is', this.url);
const headers: Headers = new Headers();
headers.append('Authorization', 'Basic ' + this.Auth);
headers.append('Content-Type', 'application/json');
return (this.http.get('http://' + this.url +'/Windchill/servlet/rest/rfa/instances?module=SEASON',
{headers: headers}).
map((response: Response) => response.json()));
}
}
输出就像这样
Here
auth-service.ts:49 Headers {_headers: Map(2), _normalizedNames: Map(2)}
auth-service.ts:77 There
season-service.ts:19 Inside SeasonService constructor
season-service.ts:34 Season Auth is undefined
season-service.ts:35 Season url is undefined
season-service.ts:22 Retrived Auth is d2NhZG1pbjp3Y2FkbWlu
season-service.ts:27 Retrived url is 192.168.146.52
auth-service.ts:79 Your CSRF is laxYnd5XE6d/r+W655087+8dY5Irxc7do94fxLgvY5ImgNeIwsgI1bYaQdAzxZDM5sMZsqgbXppFntGDoJhrq+puJJROnN+N1MEcy7d4Js8ozs7Oxpwfpe0zRvcIktg=
auth-service.ts:82 Your Auth is d2NhZG1pbjp3Y2FkbWlu
auth-service.ts:85 Your url is 192.168.146.52
答案 0 :(得分:1)
您必须等待两个承诺在提出请求之前得到解决。
首先将存储代码移动到某种<?php
$data = $this->CustodyKeys->HoldersKeys
->find(
'all',
['conditions' => ['HoldersKeys.id' => $this->request->query['holders_keys_id']]]
)
->contain('TableName');
方法。
init
现在在getSesonList之前调用init方法:
public init(){
let promiseList: Promise<any>[] = [];
promiseList.push(
this.storage.get('Auth').then((Auth) => {
console.log('Retrived Auth is', Auth);
this.Auth = Auth;
} ));
promiseList.push(
this.storage.get('url').then((url) => {
console.log('Retrived url is', url);
this.url = url;
} ));
return Promise.all(promiseList);
}
这将确保在两个存储承诺得到解决后调用this.sessionService.init().then((values)=>{
this.sessionService.getSeasonList();
});
方法。
显然你应该把一些错误处理代码放在你身上。