Javascript Don';t处理forEach循环中的下一个元素,直到第一个元素的处理结束
我正在forEach循环中运行post调用。我该怎么做呢?在第一个元素的过程完成之前,它不会转到列表中的下一个元素 这是我的数组: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><
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,你能给我举个例子吗,我从未做过这样的操作