javascript - 如何在其他功能之前执行 fetch()?
问题描述
我目前正在学习 JavaScript,并且一直在使用 API(本例中为雅虎财经)。
目标是使用特定股票的财务数据更新值表 - 但我需要在更新数据之前获取数据。以为我可以使用如图所示的等待/异步,但它不起作用。
任何指针?
let stats;
let inputSymbol;
let stockName;
let stockSymbol;
let stockPrevClose;
let stockOpen;
let stockMarketCap;
let stockDayHigh;
function getStockStatistics(){
//Get symbol from input field
inputSymbol = document.getElementById("inputSymbol").value;
console.log(inputSymbol);
request();
updateStockTabel();
}
//Fetch data from Yahoo Finance API based on variables
const request = async () => {
const response = await fetch(`https://apidojo-yahoo-finance-v1.p.rapidapi.com/stock/v2/get-financials?symbol=${inputSymbol}®ion=US`, {
"method": "GET",
"headers": {
"x-rapidapi-key": "---",
"x-rapidapi-host": "---"
}
});
const data = await response.json();
stats = data;
console.log(data);
}
//Update statistics in table based on values from Yahoo Finance JSON object
function updateStockTabel() {
//Change properties
stockPrevClose = stats.summaryDetail.previousClose.raw;
stockOpen = stats.summaryDetail.open.raw;
stockMarketCap = stats.summaryDetail.marketCap.fmt;
stockDayHigh = stats.price.regularMarketDayHigh.fmt;
stockName = stats.price.longName;
stockSymbol = stats.meta.symbol;
//Connect document properties with variables
document.getElementById("stocPrevClose").innerText = stockPrevClose;
document.getElementById("stockOpen").innerText = stockOpen
document.getElementById("stockMarketCap").innerText = stockMarketCap;
document.getElementById("dayHigh").innerText = stockDayHigh;
document.getElementById("stockName").innerText = stockName;
document.getElementById("stockSymbolOutput").innerText = stockSymbol;
}
解决方案
您主要有 2 个选择:让您的代码保持原样,但使用它来等待运行updateStockTabel
:
request().then(() => updateStockTabel());
或将您的更改getStockStatistics
为 async 函数以执行非常相似的操作,但使用 async/await 语法:
async function getStockStatistics(){
//Get symbol from input field
inputSymbol = document.getElementById("inputSymbol").value;
console.log(inputSymbol);
await request();
updateStockTabel();
}
推荐阅读
- laravel - 如何在 laravel 8 中使用带有原始查询 FULLTEXT 和分数的分页
- python - NLTK.sem.logic 无法推断给定参数类型和结果的函数的逻辑类型,为什么?
- python - 从字典中的 DataFrame 中获取值
- reactjs - 如何将 YouTube iframe 观看时间存储在数据库中
- emacs - 在文本模式下缩进
- java - 从单个对象以及对象集合中提取任何属性值
- quickbooks - 如何在 QB Desktop 中添加供应商账单支付?
- r - 跨运行时间序列数据的 Raincloud 图
- temporal - 时间/节奏性能调整
- c++ - 没有重载函数 std::unordermap.insert 的实例