我正在使用一个异步函数来尝试将数据拉入一个带有Axios的数组。 当我在下面的forEach中记录数据时,它会显示出来,但是当我在forEach之外记录数据时,它会返回空白。 我假设这是因为程序仍在运行,但我不确定如何在没有超时的情况下解决。
const user = async(IDs) => {
var output;
var URL;
var result = [];
IDs[0].forEach(async(id) => {
URL = "https://example-api.com/" + id;
output = await axios.get(URL)
.then(function(data){
result.push(data.data.text);
console.log(result) // Returns the data
});
})
console.log(result) // returns blank
}
const user = async(IDs) => {
var output;
var URL;
var result = [];
for (const id of IDs[0]) {
URL = "https://example-api.com/" + id;
try {
output = await axios.get(URL);
result.push(data.data.text);
} catch (error) {
console.log(error)
}
}
}
试一试
所有其他的解决方案都是好的,但是它们都是一个接一个地获取数据,这会使您的代码稍慢一些。
使用这种方法,因为它将充分利用事件循环,这将更快地执行您的程序。
const result = await Promise.all(IDs[0].map(id => {
return axios.get(`https://example-api.com/${id}`)
.then(data => (data.data.text))
}))
@Shubham提出了最有效的解决方案(Promise.all
和Array.map
),但是,将Async
/Await
与Promise.Then
相结合会破坏可读性,特别是随着复杂性的增加。
在可能的情况下,应首选等待
而不是承诺。然后
:
const result = await Promise.all(IDs[0].map(async id => {
const data = await axios.get(`https://example-api.com/${id}`);
return data.data.text;
}));