во время длинной петли сеть зависает - PullRequest
0 голосов
/ 05 октября 2018

Допустим, у меня очень длинный цикл, который занимает несколько минут.

for(let i=0; i<10000; i++){
  db.query(`INSERT INTO table(col1) VALUES('data')`, function(error, result){
});

Из того, что я понимаю, даже если цикл не завершен, пользователи могут взаимодействовать с Интернетом из-за отсутствияблокировка ввода / вывода.Но пока цикл не закончится, сеть замерзнет.

Что-то я делаю не так?Или любое предложение было бы хорошо.

1 Ответ

0 голосов
/ 05 октября 2018

Попробуйте это:

function breathe() {
  return new Promise((resolve, reject) => setTimeout(resolve));
};

async function non_synchronous_loop_using_await() {
  for(let i=0; i<10000; i++){
    db.query(`INSERT INTO table(col1) VALUES('data')`, function(error, result){
      // ...
    });
    if (!(i % 1000)) await breathe(); // every 1000 iterations let other tasks run
  }
}
...