Javascript 如何让函数在返回前完成for循环

Javascript 如何让函数在返回前完成for循环,javascript,axios,Javascript,Axios,下面是我键入的代码,用于遍历数组并将所需数据粘贴到输出数组中,然后最终返回输出数组: var stocks = ['AAPL', 'BMY'] let getInfo = arr => { let output = [] arr.forEach(i => { var root = 'https://fmpcloud.io/api/v3/profile/' + i + '?apikey=myAPIKey' axios.get(root)

下面是我键入的代码,用于遍历数组并将所需数据粘贴到输出数组中,然后最终返回输出数组:

var stocks = ['AAPL', 'BMY']

let getInfo = arr => {
    let output = []
    arr.forEach(i => {
    var root = 'https://fmpcloud.io/api/v3/profile/' + i + '?apikey=myAPIKey'
        axios.get(root)
        .then((data) => {
            output.push(data.data)
            })
        .catch((e) => {
            console.log('error', e)
            })
  })
  console.log('output: ', output)
  return output
}

getInfo(stocks)

log只是记录一个空数组,这使我认为它在for循环完成执行之前进入return语句。有人知道先完成for循环,然后最终返回输出数组的最佳方法吗?

这是因为axios是异步方法,返回语句应该在
axios()之前返回。然后()

使用和使用
async/await

var股票=['AAPL','BMY']
让getInfo=async arr=>{
让输出=[]
常量承诺=[]
arr.forEach(i=>{
变量根https://fmpcloud.io/api/v3/profile/“+i+”?apikey=myAPIKey”
promises.push(axios.get(root))
。然后((数据)=>{
输出.推送(数据.数据)
})
.catch((e)=>{
console.log('error',e)
})
})
const result=等待承诺。全部(承诺)
输出=result.map(r=>r.data)
console.log('output:',output)
返回输出
}
getInfo(股票)

不要使用forEach。使用for/of循环。接下来,使用async/await在
axios呼叫。应该可以了。

Axios.get
返回一个承诺,它是异步执行的,而lambda的其余部分则继续执行


查看
Promise.all()。比如:


让getInfo=async arr=>{
让输出=[]
试一试{
用于(arr中的var i){
变量根https://fmpcloud.io/api/v3/profile/“+arr[i]+”?apikey=myAPIKey”
var data=await axios.get(根);
输出.推送(数据.数据);
}
}
捕获(e){
//哎呀
console.log('error',e);
返回null;
}
返回输出;
}
var股票=[“AAPL”,“BMY”];
让getInfo=async(arr)=>{
常量输出=等待承诺。全部(
arr.map(
(i) =>
新承诺(异步(解析、拒绝)=>{
试一试{
const{data}=wait axios.get(
`https://fmpcloud.io/api/v3/profile/${i}?apikey=myAPIKey`
);
解析(数据);
}捕捉(错误){
拒绝(错误);
}
})
)
);
日志(“输出:”,输出);
返回输出;
};
getInfo(股票);

谢谢!当我运行代码:[object Promise]{…}时,我得到了这个结果。有一个输入错误,我刚刚更新。再检查一遍,汉克斯!当我尝试使用var answer=getInfo(array)将函数作为闭包,然后使用console.log answer时,它返回[object Promise]{…}Yes!getInfo返回一个承诺,因为它是异步的。您可以将其与await一起使用,例如
answer=await getinfo(array)
或与then:
getinfo(array)一起使用。然后(output=>{//do your want with output})
小心,在程序的主体中不允许使用await,它应该在另一个异步函数中。。。