网络在长时间循环中冻结
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
}
}
假设我有一个很长的循环,需要几分钟才能完成。
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
}
}