网络在长时间循环中冻结

the web freezes during a long loop

假设我有一个很长的循环,需要几分钟才能完成。

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

据我了解,即使循环不完整,由于非阻塞,用户也可以与网络进行交互I/O。 但在循环结束之前,网络会冻结。

我做错了什么吗?或者任何建议都很好。

试试这个:

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
  }
}