Javascript 如何在一个数组中存储多个异步$.get请求的结果?

Javascript 如何在一个数组中存储多个异步$.get请求的结果?,javascript,jquery,Javascript,Jquery,我有一个存储在数组中的项目列表。对于数组中的每个项,我需要发出一个API请求,并添加一些返回到另一个数组中的数据,以便以后可以对其执行操作 我认为问题在于我的get请求是异步的,因此当我试图将数据添加到数组中时,数据不一定被加载,但我认为这就是应该涵盖的内容 var cardRequestList = ["Scapeshift","Ghostform", "Daybreak Chaplain"] var url = "https://api.magicthegathering.io/v1/ca

我有一个存储在数组中的项目列表。对于数组中的每个项,我需要发出一个API请求,并添加一些返回到另一个数组中的数据,以便以后可以对其执行操作

我认为问题在于我的get请求是异步的,因此当我试图将数据添加到数组中时,数据不一定被加载,但我认为这就是
应该涵盖的内容

var cardRequestList = ["Scapeshift","Ghostform", "Daybreak Chaplain"]

var url = "https://api.magicthegathering.io/v1/cards?name=%22";

var cardInfo =[];

for (var cardName in cardRequestList){
  var results = getCard(cardRequestList[cardName]);
  cardInfo.push(results);
}

console.log(cardInfo); // results should come back here

function getCard(cardName){
    var cardUrl = url.concat(cardName,"%22");
    $.get(cardUrl).then(
    function(data) {
      var temp = [data.cards[0].name,data.cards[0].printings]
      return temp;
    }, function() {
      alert( "$.get failed!" );
    }
  );
}
then()

要解决这个问题,您可以在循环中发出请求,将这些调用返回的jqXHR对象添加到一个数组中,然后将该数组应用于
$。当()完成所有请求后,执行一些其他逻辑

在请求本身中,您需要将返回的数据添加到数组中,因为您无法从异步调用返回任何内容

尽管如此,您的代码看起来是这样的:

var cardRequestList=[“替罪羊”、“幽灵形态”、“黎明牧师”]
变量url=”https://api.magicthegathering.io/v1/cards?name=%22";
var cardInfo=[];
var requests=cardRequestList.map(函数(cardName){
返回getCard(cardName);
});
函数getCard(cardName){
var cardUrl=url.concat(cardName,“%22”);
返回$.get(cardUrl).then(函数(数据){
push([data.cards[0]。名称,data.cards[0]。打印];
},函数(){
警报(“$获取失败!”);
});
}
$.when.apply($,requests).done(函数(){
//所有请求都已完成且cardInfo已填充,请将逻辑放在此处。。。
console.log(cardInfo);
});

您的
。然后()
将覆盖单个请求,但为了等待多个请求,您需要
Promise.all()
。如果在
$.get(…
之前放置一个
return
,则可以将for循环替换为
Promise.all(cardRequestList.map(getCard))。然后(results=>…)
@Taplar我重新打开了它,因为常见的重复目标与OP要求的不完全一样。他们已经正确处理了一个请求,他们的目标是合并多个请求中的数据。@RoryMcCrossan你确定吗?getCard方法不返回任何内容。它不起作用,但OP正在尝试:
返回temp
a然后将
push()[cardName];
返回为未定义。此时,我认为
cardName
是一个字符串。我将其更改为
getCard(cardName)
,这似乎解决了问题。但是,在修复后,我注意到一些奇怪的情况。数组
cardInfo
似乎返回了6个元素(而不是我预期的3个),前三个是未定义的。这比我最初得到的要好,但仍然有些奇怪。这是我一直在做的小提琴的链接:再次感谢你的帮助。对不起,我的错误。我已经为你更新了答案再次感谢你的帮助。我仍然认为
行返回getCard(cardRequestList[cardName];
需要更改为
返回getCard(cardName);
。除此之外,我仍然有问题。在你的
$.when.apply..
函数中,有一个
控制台.log(cardInfo)
。当我打开控制台运行此代码时,它会立即返回
[]
。当我展开它时,它包含正确的数据,但有一条消息说,
下面的值刚刚计算过
。如果我将其更改为
警报(cardInfo);
,警报返回为空。该函数调用时,
cardInfo
似乎仍然没有填充。我已稍微更新了小提琴: