![](/img/trans.png)
[英]I get the error 'Request failed with status code 400' when I use axios
[英]Getting 400 error code when I run axios get request?
我写了一些代码来获取信息
const stock = await Stock.find({
exchange: exchange
});
// Here stock array length is 5300
stock.forEach(async (stockEl) => {
const EOD_API = process.env.EOD_HISTORICAL_API
const {data} = await axios.get(`https://eodhistoricaldata.com/api/fundamentals/${stockEl.code}?api_token=${EOD_API}&filter=General::Industry`);
console.log(data);
});
在这里,我通过forEach
function 对每个股票数组元素发出请求。 然后它给我像图像一样的错误-点击查看图像
但是当我像这样将它放在 forEach function 之外时-
const EOD_API = process.env.EOD_HISTORICAL_API
const {data} = await axios.get(`https://eodhistoricaldata.com/api/fundamentals/${stockEl.code}?api_token=${EOD_API}&filter=General::Industry`);
console.log(data);
然后它没有错误。 因为记忆股票有 5300 个元素,这意味着 axios 运行 5300 次。
任何解决方案或想法?
在 forEach 中执行 await 不会保留该过程,因为 forEach 不是承诺感知的。 试试这个:
(async () => {
for (let index = 0; index < stock.length; index++) {
const EOD_API = process.env.EOD_HISTORICAL_API
const {data} = await axios.get(`https://eodhistoricaldata.com/api/fundamentals/${stock[i].code}?api_token=${EOD_API}&filter=General::Industry`);
console.log(data);
}
})();
更多信息。
您需要进行一些更改:
将 forEach 替换为 for 因为 forEach 不支持 promise
使用 try, catch => 捕获任何错误
使用 Promise.allSettled => 它允许您一起运行所有承诺,而无需相互等待,这反过来会提高您的应用程序性能。 它返回一个状态为 ("fulfilled", "rejected") 的数组
const fetchSingleStockElement = async (stockEl) => { try { const EOD_API = process.env.EOD_HISTORICAL_API, { data } = await axios( `https://eodhistoricaldata.com/api/fundamentals/${stockEl.code}?api_token=${EOD_API}&filter=General::Industry` ); return data; } catch (err) { throw new Error(err); } }; const fetchAllStockData = async () => { let promisesArray = []; try { //fetch stock array const { data } = await Stock.find({ exchange: exchange }); //fetch single stock for (let i = 0; i < data.length; i++) { promisesArray.push(fetchSingleStockElement(data[i].id)); } const results = await Promise.allSettled(promisesArray); console.log('results', results); } catch (err) { console.log('results error', err); }
};
这是一个带有 4466 个条目的假 API 的工作示例:
const fetchSingleAirline = async (airlineId) => {
try {
const { data } = await axios(`https://api.instantwebtools.net/v1/airlines/${airlineId}`);
return data;
} catch (err) {
throw new Error(err);
}
};
const fetchAllAirlineData = async () => {
let promisesArray = [];
try {
const { data } = await axios('https://api.instantwebtools.net/v1/airlines');
for (let i = 0; i < data.length; i++) {
promisesArray.push(fetchSingleAirline(data[i].id));
}
const results = await Promise.allSettled(promisesArray);
console.log('results', results);
} catch (err) {
console.log('results error', err);
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.