Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环的Javascript异步行为_Javascript_Loops_Asynchronous - Fatal编程技术网

循环的Javascript异步行为

循环的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) =>

我使用async/await异步获取数据,然后一个接一个地运行两个for循环。所以我的问题是,对于大数据集,for循环是否会相互重叠,因为js是异步的,如果是,如何解决这个问题? 循环在什么条件下可以重叠

事实上,我正试图做一个下拉列表,它的工作,但我有这个疑问

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”循环

以下是每个操作的顺序和详细信息

  • “I”循环将10个同步操作序列化
  • “J”循环产生了10个不同的承诺。它们可能以不同的顺序解决
  • “K”循环创建10个序列化的承诺。每次迭代都要等到承诺得到解决后再进行净承诺

  • 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.哈函数返回一个承诺?它将返回结果,而不是承诺。