异步键入休息客户端并承诺执行

时间:2018-08-01 11:05:36

标签: typescript async-await electron

我是Typescript的新手,正在开发我的第一个基于Electron的应用程序。第一部分是使用json网络服务的结果填充本地数据库的类。

我的获取数据的类如下,是扩展类。在getAll中,如果我在JSON.parse之后退出主体,我可以在控制台中看到我的结果而不会出现问题。

import * as typedHttpClient from "typed-rest-client/HttpClient";

abstract class Client<Id, Item> {
  private url: string;

  constructor(url: string) {
    this.url = url;
  }

  public async getAll() {
    const httpc: typedHttpClient.HttpClient = new typedHttpClient.HttpClient("pip-dev");
    let body = await (await httpc.get(this.url)).readBody();
    body = JSON.parse(body);
    return body;
  }


}

export default Client;

import { BASE_URI } from "../config";
import Client from "./client";

const URI = `${BASE_URI}/v2/achievements/daily`;

export interface IAchievementDaily {
  id: number;
  level: ILevel;
  required_access: string[];
}

export interface ILevel {
  min: number;
  max: number;
}

export class AchievementsDailyClient extends Client<number, IAchievementDaily> {
  constructor() {
    super(URI);
  }
}

export default new AchievementsDailyClient();

但是,当我使用以下代码从数据库类中调用此代码时,我只能设法获得Promise:String或Object:Object输出。

  public getAchievementsDaily() {
    const response = api.achievementsDaily.getAll();
    response.then((result) => this.logInformation(result));
  }

  private logInformation(inf: any) {
    if (inf) {
     // tslint:disable-next-line:no-console
     console.dir("Information : " + inf, { depth: null, colors: true });
    }
  }

据我所知,response.then命令仅应在我的getAll返回正文之后才调用。我检查了多个教程,这是我所能获得的。

我显然错过了一些东西,因为这不应该那么难。我需要做些什么来以不同的方式解析结果吗?

1 个答案:

答案 0 :(得分:1)

在这一行:

console.dir("Information : " + inf, { depth: null, colors: true });

字符串串联调用inf.toString(),将inf转换为无用的[object Object]字符串,甚至还没有到达console.dir。试试这个,您可能会看到您的数据:

console.dir("Information : ", inf, { depth: null, colors: true });