循环的Javascript异步行为
我使用async/await异步获取数据,然后一个接一个地运行两个for循环。所以我的问题是,对于大数据集,for循环是否会相互重叠,因为js是异步的,如果是,如何解决这个问题? 循环在什么条件下可以重叠 事实上,我正试图做一个下拉列表,它的工作,但我有这个疑问循环的Javascript异步行为,javascript,loops,asynchronous,Javascript,Loops,Asynchronous,我使用async/await异步获取数据,然后一个接一个地运行两个for循环。所以我的问题是,对于大数据集,for循环是否会相互重叠,因为js是异步的,如果是,如何解决这个问题? 循环在什么条件下可以重叠 事实上,我正试图做一个下拉列表,它的工作,但我有这个疑问 const createDropdown = async language => { let i = 0; let listPromise = new Promise((resolve, reject) =>
const createDropdown = async language => {
let i = 0;
let listPromise = new Promise((resolve, reject) => {
db.ref("Products/" + language).on('value', snapshot => {
resolve(snapshot.val())
})//Fetching Data
})
let list = await listPromise;
for(i in list)
dropdown.remove(0)
for(i in list)
dropdown.options[dropdown.options.length] = new Option(list[i].name, list[i].name)
}
我正在运行这段代码,for循环没有重叠,但是否存在这样的条件?一个接一个地放入代码中的循环将永远不会重叠。循环中的代码是同步的或异步的
for (var i = 0; i < 10; i++) {
doSomethingSync()
}
for (var j = 0; j < 10; j++) {
createPromise().then((res) => {console.log(res))
}
for (var k = 0; k < 10; k++) {
var res = await createPromise();
console.log(res);
}
for(变量i=0;i<10;i++){
doSomethingSync()
}
对于(var j=0;j<10;j++){
createPromise().then((res)=>{console.log(res))
}
对于(var k=0;k<10;k++){
var res=等待createPromise();
控制台日志(res);
}
上面,“I”循环完成所有操作,然后是“J”循环,然后是“K”循环
以下是每个操作的顺序和详细信息
1、2和3总是一个接一个地发生。我使用这个解决方案来处理axios,向服务器发出大约1000个请求,效果很好,也许这也可以是您的解决方案。在这段代码中,您将承诺使用db.ref并等待响应,然后使用它进行操作
const createDropdown=async(语言)=>{
const listPromise=等待承诺(
返回wait db.ref(“Products/”+language).on('value',snapshot=>snapshot.val())
)
为了(我承诺)
下拉列表。删除(0)
为了(我承诺)
dropdown.options[dropdown.options.length]=新选项(列表[i].name,列表[i].name)
}
循环不是异步的,并且永远不会重叠。“…因为js是异步的”:这是什么意思?js代码不是同时执行的。换句话说,循环是同步的,一次只能执行一个作业。您的代码不完整(下拉列表
从未初始化)如果循环是同步的,那么如果我在两个循环之间写一个console.log或alert,它会等待第一个循环执行吗?我有两个问题1.如果我在1和2之间写一个console.log,它会等待1执行吗?2.如果我想在继续下一个承诺之前解决一个承诺,就像在循环2中一样。我该怎么做?1.是的2.哈函数返回一个承诺?它将返回结果,而不是承诺。