![](/img/trans.png)
[英]How to export the response data obtained from a GET API using fetch from one module to another
[英]How to fetch from one API using data fetched from another?
我正在尝试使用short_name
键stock_data
state 变量中每只股票的价格。 这是我的useEffect
function,它为我完成了所有的提取工作。 fetch_BSE_Data
将存储在stock_data
中。 但是我使用的 API 没有给出任何股票的价格细节。 因此,我尝试在fetch_price_data
function 中使用 Yahoo 的 API 获取价格:
在 UseEffect 中获取
useEffect(() => {
const fetch_BSE_Data = async () => {
console.log("fetching data");
return await fetch(
"https://api.bseindia.com/BseIndiaAPI/api/DefaultData/w?Fdate=20220912&Purposecode=P9&TDate=20221216&ddlcategorys=E&ddlindustrys=&scripcode=&segment=0&strSearch=S"
)
.then((response) => response.json())
};
const fetch_price_data = async () => {
const data = stock_data.map((stock) => {
var shortName = stock.short_name;
if (stock.short_name.includes(" ")) {
shortName = stock.short_name.replace(" ", "")
}
else if (stock.short_name.includes("*")) {
shortName = stock.short_name.replace("*", "")
}
fetch(`https://query1.finance.yahoo.com/v8/finance/chart/${shortName}.BO`)
.then((response) => response.json())
.then((response) => {
if (response.chart.result[0]) {
console.log("result: ", response.chart.result, "response: ", response.chart.result[0].meta.previousClose)
return response.chart.result[0].meta.previousClose;
}
else {
console.log("ERROR:", response.chart.error.code);
return null;
}
});
})
return data
}
const fetchData = async () => {
const stock_response = await fetch_BSE_Data();
const price_data = await fetch_price_data();
console.log("price_data: ", price_data)
const mappedItems = makeMyNewData(stock_response, price_data);
setStockData(mappedItems);
console.log("stock_data after setStockData", stock_data);
}
fetchData();
}, []);
fetch_price_data
中的data
以undefined
数组的形式出现。 我究竟做错了什么?
您需要使用Promise.all
以便并行获取所有价格:
// Since fetch_BSE_Data and fetch_price_data are doing the
// same thing (fetching data), you can make a generic function
// for fetching that takes a url as an argument.
const fetchData = async (url) => {
try {
const response = await fetch(url)
if (!response.ok) throw response.statusText
const data = response.json()
return data
} catch(error) {
console.error(error)
}
};
const getStockPrices = async () => {
// Use the generic fetchData to get the list of stocks
const stocks = await fetchData("https://api.bseindia.com/BseIndiaAPI/api/DefaultData/w?Fdate=20220912&Purposecode=P9&TDate=20221216&ddlcategorys=E&ddlindustrys=&scripcode=&segment=0&strSearch=S");
// RegEx is a clean way to trim and remove any
// special characters or numbers from the shortNames
const shortNames = stocks.map((stock) => stock.short_name.replace(/[^a-zA-Z]/g, ''));
// Use the generic fetchData to get the stock
// details for each of the shortNames and use
// Promise.all to await the results of all of the data
const prices = await Promise.all(shortNames.map((stock) => fetchData(`https://query1.finance.yahoo.com/v8/finance/chart/${stock}.BO`)))
// Do other stuff to data...
}
getStockPrices()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.