如何在异步函数中循环



我是js的新手,不明白为什么我的循环不工作。

(async () => {
let arr = []
while(ticket.stop != true) {
let data = await fetch("https://front-test.beta.aviasales.ru/search")
let commit =  await data.json() 
let ticketsURL = "https://front-test.beta.aviasales.ru/tickets?" + Object.keys(commit) + "=" + Object.values(commit)
let ticketFetch = await fetch(ticketsURL)
let ticket = await ticketFetch.json()
console.log(ticket)
arr.push(ticket)
}
})()

编辑:您的代码返回一个包含超过346个项目的数组,您要做的只是一遍又一遍地循环并调用它们。你能解释一下你想用代码做什么吗?

我不知道你到底想用你的代码做什么,但这应该随你自己的用例而变化,但是你想做的事情可以在async-call-inside-a-loop中总结。现在要记住的一件事是当你创建循环时有两件事要记住,

  • 循环变量和索引
  • 循环范围

关键是,当你在循环中触发一个函数时,它会获得自己的上下文,因此会持久保存该值。然而,直接调用一些异步调用将失败。因此,JavaScript提供了一些可以解决这个问题的东西,它们被称为Immediately Invoked Function ExpressionIIFE。这正是你所做的,但是你把整个循环包裹在里面。

简而言之,IIFE获得了自己的上下文,因此每个由循环创建的下一个IIFE将单独工作并解析。

const length = array.length;
for(var i = 0; i < length; i++){
(function(index) {
const response = // some async call
}(i));
}

相关内容

  • 没有找到相关文章

最新更新