首页 > 解决方案 > 如何在 Array.map 中调用异步函数 (XMLHttpRequest) 并等待函数完成?

问题描述

我正在尝试做这样的事情:

Promise.all(stocks.map(e=>{
  var url = `https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=${e}&apikey=${process.env.API_KEY}`;
  var dataReq = new XMLHttpRequest();
  dataReq.open('GET', url, true);
  dataReq.send()
  return dataReq.onload=()=>Promise(function(){
    var rawData = JSON.parse(dataReq.responseText);
    var data = rawData['Time Series (Daily)'];
    var keys = Object.keys(data).sort((a,b)=>a-b);
    return data[keys[0]];
  }).then(data=>data)
}))
.then(data => {
  console.log(data);
})

我尝试将 thedataReq.send()dataReq.onload()函数都包装在 中new Promise(),我尝试将 the 包装new Promise()在一个函数中,并且我尝试同时返回 the.onload(...).then(...)和 the .send().then(...)(将我要返回的任何一个移动到最后一行)。我已经让控制台输出 yield [[Function], [Function]],但不能让它显示实际数据。我想等到两组数据都被检索到的原因是因为我想在数据库中搜索符合任一数据集中条件的条目,所以我想先获取两组数据并then搜索数据库.

标签: javascriptajaxasynchronouspromise

解决方案


推荐阅读