我的循环没有移动到数组中的下一个元素。

问题描述 投票:1回答:1

我先前的后续行动 疑问. 我试图运行一个递归函数,一次处理一个数组中的一个元素,我,它没有去想要它处理第一个元素,而不是开始处理列表中的下一个元素,直到第一个元素的处理完成? 我,它不会去想要它处理第一个元素,而不是开始处理列表中的下一个元素,直到第一个元素的处理完成?

这是我的数组。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;
   }
}

上面的逻辑只是处理第一个元素,然后就停止了。为什么它没有移动到数组中的下一个元素并进行处理?

它没有移动到数组中的下一个元素。

javascript jquery arrays loops post
1个回答
1
投票

不要使用 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)
© www.soinside.com 2019 - 2024. All rights reserved.