【发布时间】:2020-09-02 08:28:31
【问题描述】:
我有问题。我正在自己学习使用 Node 和 Express 的 Javascript,我不确定我在问什么,但我会尝试以某种方式解释自己。
我正在使用 Express,节点服务器对 GET 请求的响应时间很长。它由快速路由器处理。响应基本上是对我的数据库的SELECT 查询,它通过forEach 循环得到了相当长的回调。这个循环包含一些在每个循环周期触发的准备好的语句。这些查询中的每一个都有另一个回调来处理一些值、解析承诺等。
只是为了可视化结构:
router.get("/", (req, res, next) => {
parser.on('end', function(p) { // some event function
db.query("SELECT * FROM aziende", function (err, result, fields) { // first sql query (I'm using mysql2 npm packet)
bigArray.forEach((item, index) => {
if (condition) {
db.execute(query, [item.prop1, item.prop2, item.prop3], function(err2, result2) { ... }); // first prepared statement with callback
} else {
db.execute(query2, [item.prop1, item.prop2, item.prop3], function(err3, result3) { ... }); // second prepared statement + callback
}
});
});
});
});
如您所见,这是一个非常嵌套的结构。
用户从浏览器上的按钮启动此过程。我想要做的是保证通过按下另一个“停止”按钮来随时停止该过程。但我不知道如何以及是否可以清理服务器的回调队列。我说的是数百个查询。 forEach 循环似乎很快就结束了,但回调队列可能需要几秒钟到几分钟(20-30 分钟)才能完成。如您所知,我无法一直阻止该用户。
希望你能帮忙。
P.S:我已经在使用 socket.io 来通知用户服务器的详细状态(通过使用浏览器上的进度条),所以如果我的问题的假设解决方案期望完成套接字技术,然后很受欢迎。
【问题讨论】:
标签: javascript mysql node.js express