#javascript #reactjs
Вопрос:
В соответствии с приведенным ниже временем ожидания кода не работает должным образом, как решить эту проблему.
for (let i = 0; i lt; 4; i ) { if (socket.isConnected() == true) { connectCall([]); break; } else { setTimeout(() =gt; { console.log("Call-1:"); }, 1000); } }
Здесь setTimeout не работает должным образом каждый раз, когда задерживается на некоторое время. меня беспокоит то, что, когда условие совпадает, прерывается цикл, а не совпадает, затем задерживается на некоторое время.если есть какой-либо другой способ сделать это, пожалуйста, пришлите мне правильное решение. если это сделано из цикла while или любого другого цикла, то это также принимается.
Ответ №1:
setTimeout
работает правильно, это задерживает выполнение console.log
на 1 секунду, но это происходит асинхронно.
Как вы можете видеть в этом примере, все журналы происходят непосредственно через 1 секунду:
for(let i = 0; i lt; 4; i ) { setTimeout(() =gt; { console.log(i); }, 1000); }
Если вы хотите «поспать» в течение одной секунды в своем цикле, вам нужно подождать setTimout
.
Вы можете сделать это Promise
, например, с помощью:
(async () =gt; { const socket = { isConnected: () =gt; false } for (let i = 0; i lt; 4; i ) { if (socket.isConnected()) { connectCall([]); break; } else { await new Promise(res =gt; { setTimeout(() =gt; { console.log(`Call-${i}:`); res(); }, 1000); }); } } })();