首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typescript ionic 3异步/等待实现

Typescript ionic 3异步/等待实现
EN

Stack Overflow用户
提问于 2017-04-29 03:49:45
回答 1查看 5.1K关注 0票数 1

我目前正面临一个问题,当UserData注入到我的另一个组件中时,Load()函数总是比构造函数中的getFromStorageAsync()更早启动,所以ip_address始终是未定义的。

以下是我的服务代码(UserData)

代码语言:javascript
复制
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { Storage } from '@ionic/storage';
import 'rxjs/add/operator/map';

/*
  Generated class for the UserData provider.

  See https://angular.io/docs/ts/latest/guide/dependency-injection.html
  for more info on providers and Angular 2 DI.
*/
@Injectable()
export class UserData {
  public data: any;
  private ip_address: any;

  constructor(public http: Http, private storage: Storage) {
    this.data = null;
    this.ip_address = this.getFromStorageAsync()
  }

  async getFromStorageAsync(){
        let val = await this.storage.get('ip_address');
        this.ip_address = val.toPromise();
    }

  load(): any {
    console.log(this.ip_address);
    if (this.data) {
      return Promise.resolve(this.data);
    }
    return new Promise(resolve => {
      this.http.get(this.ip_address + "/api/user")
        .map(res => res.json())
        .subscribe(data => {
          this.data = data;
          resolve(this.data);
        });
    });
  }
}

由于未定义的ip地址,无法从服务器获取数据。使用异步和等待是正确的方式吗?请帮帮忙。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-04-29 03:58:11

代码语言:javascript
复制
let storage = await storage.ready();
let val =     await this.storage.get('ip_address');
this.ip_address = val.toPromise();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43687910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档