Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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 Don';t处理forEach循环中的下一个元素,直到第一个元素的处理结束_Javascript_Jquery_Json_Loops_Ecmascript 6 - Fatal编程技术网

Javascript Don';t处理forEach循环中的下一个元素,直到第一个元素的处理结束

Javascript Don';t处理forEach循环中的下一个元素,直到第一个元素的处理结束,javascript,jquery,json,loops,ecmascript-6,Javascript,Jquery,Json,Loops,Ecmascript 6,我正在forEach循环中运行post调用。我该怎么做呢?在第一个元素的过程完成之前,它不会转到列表中的下一个元素 这是我的数组:arr=['hermine','Ron','Harry'] 这是我的循环: arr.forEach(d=>{ $('#the_table>tbody').append(` <tr id='tr_${d}'> <td'>${d}</td> <td><

我正在forEach循环中运行post调用。我该怎么做呢?在第一个元素的过程完成之前,它不会转到列表中的下一个元素

这是我的数组:
arr=['hermine','Ron','Harry']

这是我的循环:

arr.forEach(d=>{
   $('#the_table>tbody').append(` 
      <tr id='tr_${d}'>
         <td'>${d}</td>
         <td><i id='change' class='no'></i></td>
      </tr>
   `);
});

const myfunc = () => {
$.post(api, json_object,
   function(data, status) {
      if (data.value === 'started') {
      setTimeout(myfunc, 5000);
   } else {
      $('#change').removeClass('no').addClass('yes');
   }
}, 'json');
            }
myfunc();
arr.forEach(d=>{
$('#_table>tbody')。追加(`

您不需要递归函数;您需要与他们的伙伴一起使用Promise api(async/await)。然后()-但你需要按一定的顺序排列

最开始是,而且(第一次!)它允许客户端javascript与后端服务器通信,并接收带有新数据的响应,这些数据可以被解析并添加到DOM中,而无需离开或刷新页面。这很棘手,也很困难,而且很少有人使用它,但它确实有效

.then()
John Resig出现了,他发明了jQuery,并在其中包含了
$.ajax()
构造,以及它的近亲
$.get()
$.post()
$.load()
-XHR非常简单。全世界都为此欢欣鼓舞!但因为它是异步的,所以当您要进行几个相关的ajax调用时,要以正确的顺序从函数中获取值仍然有点棘手

.then()
随之而来的是Promise api——因为有什么比让你的代码做出承诺并等待它实现更容易呢?世界再一次欢欣鼓舞,没有抢劫。你只需做出承诺并
。然后()
你就可以使用
.after()
下一步()
当()
当然还有
.then()
,这是一种真正可读的代码,读起来和写起来一样容易

没有什么比这更容易的了!直到2017年,
async
await
被添加到ECMAScript中。现在你所要做的就是在函数范围的顶部添加关键字
async
,然后在其中你可以使用
await
关键字为你写下这些承诺。因为
async/await
是实际上,它只是Promises api的包装器,您仍然可以使用
.then()
.when()
.next()
等-但是您的代码更可读,编写更简单

全世界都欢欣鼓舞,但仍然没有抢劫

WttW*:这(异步/等待和承诺api)是您绝对必须了解的东西-它每天都对您更有用

*给智者的话

参考资料:


我建议创建一个递归函数,将索引传递到该函数中。在调用后逻辑成功后,再次调用该函数以生成下一个索引。@Taplar,你能给我举个例子吗,我从未做过这样的操作