我先前的后续行动 疑问. 我试图运行一个递归函数,一次处理一个数组中的一个元素,我,它没有去想要它处理第一个元素,而不是开始处理列表中的下一个元素,直到第一个元素的处理完成? 我,它不会去想要它处理第一个元素,而不是开始处理列表中的下一个元素,直到第一个元素的处理完成?
这是我的数组。arr = ['Hermione', '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>
`);
});
let finished = 1;
for (let i = 0; i <= arr.length; i++) {
if (finished === 1 && arr.length !== 0) {
hp_name = arr[i];
finished = 0;
}
if(finished == 0) {
const myfunc = () => {
json_object['name'] = hp_name;
$.post(api, json_object,
function(data, status) {
if (data.value === 'started') {
setTimeout(myfunc, 5000);
} else {
finished = 1;
$('#change').removeClass('no').addClass('yes');
}
}, 'json');
}
myfunc();
if (finished === 1) continue;
}
}
上面的逻辑只是处理第一个元素,然后就停止了。为什么它没有移动到数组中的下一个元素并进行处理?
它没有移动到数组中的下一个元素。
不要使用 for
循环。将数组索引作为参数传递给函数,并在进行递归调用时将其递增。
const myfunc = (i) => {
if (i >= arr.length) {
return;
}
json_object['name'] = arr[i];
$.post(api, json_object,
function(data, status) {
if (data.value === 'started') {
setTimeout(function() {
myfunc(i+1);
}, 5000);
} else {
$('#change').removeClass('no').addClass('yes');
}
}, 'json');
}
myfunc(0)