Я создаю приложение Alexa, которое выполняет функции менеджера портфеля акций.У меня есть функция, которая сначала извлекает все акции и количество акций, принадлежащих пользователю.Для каждой из этих акций я должен запросить API, используя axios, чтобы получить значение акции, то есть оператор get axios вложен в цикл forEach.Затем у меня есть переменная totalPrice, которая увеличивается с использованием общей цены акции;который определяется путем умножения цены на количество акций х, находящихся в собственности
. В конце цикла forEach я хочу напечатать totalPrice, который будет представлять собой целое значение портфеля
Когда яраспечатайте totalPrice в запросе, он корректно добавляет предыдущие итоговые цены акций, но если я напечатаю totalPrice после цикла forEach, он напечатает 0
var grandTotal = 0;
data.Items.forEach(function(element,index,array) {
var stock = element.Stock;
var number = element.Number;
var url = `www.api.com/${stock}`;
const getDataValues = async url => {
try {
const response = await axios.get(url);
const data = response.data;
var Price = data.PRICE;
return Price;
} catch (error) {
console.log(error);
}
};
let promiseObject = getDataValues(url);
promiseObject.then(function(result) {
var totalPriceofStocks = result * amount;
grandTotal += totalPriceOfStocks;
console.log(`{grandTotal}`); // This bit accumulates correctly
});
});
console.log(`The grand total is: ${grandTotal}`);
, что меня смущает, так как данные асинхронныеЯ думал, что использование .then
будет ждать, пока данные не будут получены.Это похоже на случай, когда при печати итога в цикле forEach это работает.Что еще интересно, так это то, что в консоли сначала выводится «Итого: 0».