Javascript 在fetch()调用列表中循环

Javascript 在fetch()调用列表中循环,javascript,Javascript,我正在尝试循环处理一组数据并进行异步调用。但是,我的语法不正确 async function getEmailData(conversationId){ fetch(aysynch) .then(response => {return response.json(); }) .then(data => { dictionary = {} console.log(data) var info = data.Body

我正在尝试循环处理一组数据并进行异步调用。但是,我的语法不正确

async function getEmailData(conversationId){
    fetch(aysynch)
    .then(response => {return response.json(); })
    .then(data => {
        dictionary = {}
        console.log(data)
        var info = data.Body.ResponseMessages.Items[0].Conversation.ConversationNodes[0].Items[0]
        console.log(info)
        var conversationId = info.ConversationId.Id
        var from = info.From.Mailbox.EmailAddress
        var to = info.ToRecipients.map(function(recipient) {return recipient.EmailAddress})
        var date = info.DateTimeReceived
        dictionary[conversationId] = {'from':from, 'to': to, 'date': date}
        return dictionary
    })
}

x = [listOfIds] //10 in total

for (i=0; i<x.length; i++) {
    console.log(x[i].ConversationId.Id)
    let response = await getEmailData(x[i].ConversationId.Id)
    let data = await response
    console.log(data)
}
异步函数getEmailData(conversationId){ 获取(同步) .then(response=>{return response.json();}) 。然后(数据=>{ 字典={} console.log(数据) var info=data.Body.ResponseMessages.Items[0]。Conversation.ConversationNodes[0]。Items[0] 控制台日志(信息) var conversationId=info.conversationId.Id var-from=info.from.Mailbox.EmailAddress var to=info.ToRecipients.map(函数(收件人){return recipient.EmailAddress}) var date=info.DateTimeReceived 字典[conversationId]={'from':from'to':to'date':date} 返回字典 }) } x=[listOfIds]//总共10个
对于(i=0;i您应该使用
let
。您正在声明一个全局变量
i

for (let i = 0; i < x.length; i++) {
    console.log(x[i].ConversationId.Id)
    let response = await getEmailData(x[i].ConversationId.Id)
    let data = await response
    console.log(data)
} 
for(设i=0;i
一些问题:

  • 函数
    getEmailData
    没有返回任何内容。您需要
    返回承诺链的结果
  • 如果不在此类函数中使用
    wait
    ,则
    async
    没有任何用处
  • 异步
    函数外部的
    等待
    无效
  • 响应
    已经是
    等待
  • 声明变量(使用
    let
    var
    const
这样做:

function getEmailData(conversationId){
    return fetch(aysynch)
    .then(response => response.json())
    .then(data => {
        const dictionary = {};
        console.log(data);
        var info = data.Body.ResponseMessages.Items[0].Conversation.ConversationNodes[0].Items[0];
        console.log(info);
        var conversationId = info.ConversationId.Id;
        var from = info.From.Mailbox.EmailAddress;
        var to = info.ToRecipients.map(recipient => recipient.EmailAddress);
        var date = info.DateTimeReceived;
        dictionary[conversationId] = {from, to, date};
        return dictionary;
    });
}

(async function() {
    let x = [1, 2, 4, 6, 9, 13, 23, 22, 24, 19]; //10 in total

    for (let i=0; i<x.length; i++) {
        console.log(x[i].ConversationId.Id);
        let data = await getEmailData(x[i].ConversationId.Id);
        console.log(data);
    }
})(); // Immediately invoked
函数getEmailData(conversationId){ 返回获取(aysynch) .then(response=>response.json()) 。然后(数据=>{ 常量字典={}; 控制台日志(数据); var info=data.Body.ResponseMessages.Items[0]。Conversation.ConversationNodes[0]。Items[0]; 控制台日志(信息); var conversationId=info.conversationId.Id; var-from=info.from.Mailbox.EmailAddress; var to=info.ToRecipients.map(收件人=>recipient.EmailAddress); var date=信息日期时间接收; 字典[conversationId]={from,to,date}; 返回字典; }); } (异步函数(){ 设x=[1,2,4,6,9,13,23,22,24,19];//总共10
for(让i=0;这是有意义的。仍然会遇到问题,每次都使用相同的ID。我更新了我的问题以显示您的回答结果还有一个变量您没有声明(因此是全局变量):
dictionary
。我更新了答案。这是需要注意的。在不声明变量的情况下,永远不要开始使用变量。使用
“使用严格”
使之成为一种强制性习惯。我将dictionary更新为一个
常量
,但它似乎仍在尝试每次提取调用的最后一个ID。命名约定的调用很好!请在
var conversationId=
之后调试以验证什么是
conversationId
。如果始终存在相同的情况,问题就在您身上r服务器代码。是的,我想这就是问题所在!现在就这么做。