#javascript #node.js #asynchronous #async-await
#язык JavaScript #node.js #асинхронный #асинхронное ожидание
Вопрос:
Я вижу, что были и другие сообщения, связанные с этой темой, но я, похоже, не могу найти решение, которое помогло бы моей ситуации. У меня есть две асинхронные функции. Один из них возвращает значение, которое должно использоваться в другой функции. По какой-то причине используемое значение считывается как пустая переменная. Я не знаю, как еще это сделать, но любая перспектива была бы оценена по достоинству.
Код
var stockSymbol = []; async function read_fortune_500() { try { const { data } = await axios({ method: "GET", url: "https://en.wikipedia.org/wiki/List_of_S&P_500_companies", }) const $ = cheerio.load(data) const elemSelector = '#constituents gt; tbody gt; tr gt; td:nth-child(1)' $(elemSelector).each((parentIndex, parentElem) =gt; { if (parentIndex lt;= 9){ $(parentElem).children().each((childIndex, childElem) =gt; { const tdValue = $(childElem).text() if (tdValue) { stockSymbol = tdValue } }) console.log(stockSymbol) } }) } catch (err) { console.error(err) } return stockSymbol; } async function collect_stocks(stockSymbol) { stockSymbol = read_fortune_500() const stockResult = await yahooStockPrices.getCurrentData(stockSymbol); console.log(stockResult); } collect_stocks(stockSymbol)
Ошибка
TypeError: Cannot read properties of undefined (reading 'split')
Если я запущу первую функцию, я смогу записать значения в консоль, поэтому я знаю, что значения там есть, но я не уверен, в чем я ошибаюсь, передавая их второй функции.
Комментарии:
1.
stockSymbol = read_fortune_500()
lt;- есть нет ожидаем
Ответ №1:
Вы определили read_fortune_500
как асинхронную функцию, поэтому она возвращает обещание. Ты, наверное, хотел await
этого collect_stocks
.
async function collect_stocks(stockSymbol) { stockSymbol = await read_fortune_500() const stockResult = await yahooStockPrices.getCurrentData(stockSymbol); console.log(stockResult); }