我是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 Expression
或IIFE
。这正是你所做的,但是你把整个循环包裹在里面。
简而言之,IIFE获得了自己的上下文,因此每个由循环创建的下一个IIFE将单独工作并解析。
const length = array.length;
for(var i = 0; i < length; i++){
(function(index) {
const response = // some async call
}(i));
}