У меня есть два класса, где я получаю продукты из класса продуктов, используя функцию async / await.
export default class Products {
async getProducts() : Promise<[]> {
return await import('../data/products.json');
}
}
export default class App {
render() {
this.products = new Products();
this.products.getProducts().then((productsData) => {
// Do stuff
});
}
}
Это отлично работает, но я хочу изменить данные в классе продуктов, прежде чем я получу их в классе App.Я попытался изменить getProducts на setProduct, где я устанавливаю продукты в consturctor и получаю их следующим образом:
async setProducts() : void {
this.products = await import('../data/products.json');
}
public getProducts(): [] {
return this.products;
}
Проблема в том, что когда я вызываю getProducts, он еще не завершил выборку, и я получаю неопределенное значение вкласс приложения.
Итак, я попытался сделать следующее:
public getProducts(): [] {
let products: [];
return this.products.then(dataSet => {
products = dataSet;
});
return products;
}
Что также привело к неопределенности
Как я мог заставить мой класс или получателя дождаться завершения импорта товаров, поэтому мой метод получения всегдавернуть импортированные данные вместо неопределенных?
Проблема, которую я пытаюсь решить, состоит в том, как разрешить обещание в методе класса, прежде чем оно вернет значение.Другими словами, метод сначала возвращает продукты, и только после этого он заполняется данными, я, конечно, мог установить setTimeout, но это не очень хорошая практика.