让我们说一个循环很长,需要几分钟才能完成。
for(let i=0; i<10000; i++){
db.query(`INSERT INTO table(col1) VALUES('data')`, function(error, result){
});
据我了解,即使循环未完成,用户也可以通过非阻塞的I / O与Web进行交互。 但是直到循环结束,网络才冻结。
我做错了什么吗?否则任何建议都会很好。
答案 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
}
}