【问题标题】:ionic storage getting values in Aync way离子存储以异步方式获取值
【发布时间】:2017-10-21 23:15:08
【问题描述】:

我正在尝试在离子存储中获取 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

【问题讨论】:

    标签: angularjs typescript promise ionic2 hybrid


    【解决方案1】:

    在提出请求之前,您必须等待两个承诺得到解决。 首先将您的存储代码移动到某个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);
    }
    

    现在在 getSesonList 之前调用 init 方法如下:

    this.sessionService.init().then((values)=>{
    this.sessionService.getSeasonList();
    });
    

    这将确保getSeasonList 方法将在两个存储承诺都得到解决后被调用。

    显然你应该放一些错误处理代码,但它在你身上。

    【讨论】:

      猜你喜欢
      • 2018-08-23
      • 2017-04-28
      • 2018-08-02
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      • 2021-01-27
      相关资源
      最近更新 更多