网络长时间停滞

时间:2018-10-05 08:15:42

标签: node.js nonblocking

让我们说一个循环很长,需要几分钟才能完成。

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

据我了解,即使循环未完成,用户也可以通过非阻塞的I / O与Web进行交互。 但是直到循环结束,网络才冻结。

我做错了什么吗?否则任何建议都会很好。

1 个答案:

答案 0 :(得分:1)

尝试一下:

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