вернуть свойства из объекта с помощью функции конструктора - PullRequest
0 голосов
/ 23 июня 2019

У меня есть объект конструктора, созданный из функции, которая является ответом на запрос axios get. Затем я хочу вернуть свойства этого объекта и сохранить некоторые значения, которые будут использоваться в качестве строки в другом классе. Например: я хочу иметь возможность сохранять значения: response.data.name, response.data.address из Resposne. До сих пор я получаю неопределенный при попытке получить эти значения.

export class MyClass {

    private _myobject: any;

    constructor(myobject: any) {
        this._myobject = myobject;
    }

    public static async getData() {

            return axios.get(url)
                .then(response => response.data)
                .catch((error) => {
                    console.log(error);
                });
    }

    public static async getCurrentData() {
        return new MyClass(await this.getData());

    }

   getName() {
       console.log(this._myobject.name);
       return this._myobject.name;
   }
}

другой класс

const temp = new MyClass(Object).getName(); //  undefined
const temp = new MyClass({}).getName(); //  undefined

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

моя проблема была решена, как показано ниже:

export class MyClass {

    private _object: any;

    private constructor(object: any) {
        this._object = object;
    }

    private static async getData() {
        return axios.get(url)
            .then(response => response.data)
            .catch((error) => {
                console.log(error);
            });
    }

    // returns data from get request, adds to constructor of same class
    public static async getCurrentData() {
        return new MyClass(await MyClass.getData());
    }

    public getName() {  // getter uses constructor
        return this._object.name;
    }
}

export class Artifact {

    public async addDataToReport() {

        const myClass = await MyClass.getCurrentData(); //  create new instance of MyClass
        const name = myClass.getName(); // call getter from myClass

        console.log(name);
    }
}
0 голосов
/ 24 июня 2019

MyClass.getCurrentData () создает новый экземпляр MyClass, который будет содержать любые извлеченные данные. Эти данные, однако, остаются в этом экземпляре, они не являются статичными.

Кроме того, я не вижу никаких ожидающих вызовов для асинхронной функции getCurrentData, поэтому может случиться так, что она будет выполнена только после того, как вы выполните проверки getName () на предмет отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...