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服务器代码。是的,我想这就是问题所在!现在就这么做。