Javascript 如何在执行其他函数之前执行fetch()?
我目前正在学习JavaScript,并一直在使用API(本例中为Yahoo Finance) 目标是用特定股票的财务数据更新一个价值表——但我需要在它更新数据之前获取数据。我想我可以使用如图所示的wait/async,但它不起作用 有什么建议吗Javascript 如何在执行其他函数之前执行fetch()?,javascript,async-await,fetch,Javascript,Async Await,Fetch,我目前正在学习JavaScript,并一直在使用API(本例中为Yahoo Finance) 目标是用特定股票的财务数据更新一个价值表——但我需要在它更新数据之前获取数据。我想我可以使用如图所示的wait/async,但它不起作用 有什么建议吗 let stats; let inputSymbol; let stockName; let stockSymbol; let stockPrevClose; let stockOpen; let stockMarketCap; let stockDa
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;
}
您主要有两种选择:让代码保持原样,但使用此选项等待运行
updateStockTabel
:
request()。然后(()=>updateStockTabel())代码>
或者将您的getStockStatistics
更改为异步函数,以执行类似的操作,但使用异步/等待语法:
async function getStockStatistics(){
//Get symbol from input field
inputSymbol = document.getElementById("inputSymbol").value;
console.log(inputSymbol);
await request();
updateStockTabel();
}
request()。然后(()=>updateStockTabel())代码>没有任何东西会等待request()
完成,除非你也在等待它。或者,如果无法使getStockStatisticsasync
(这与此代码无关),则可以使用TKoL提到的标准Promise模式。