【发布时间】:2022-01-15 18:40:37
【问题描述】:
我有一个使用socket.io 的Express.js 网站。对于每个连接的用户(套接字),都会调用一个可能需要很长时间才能解析的函数。
server.js
const app = express();
const server = http.createServer(app);
const io = new Server(server);
io.on('connection', async (socket) => {
console.log(`${socket.id}: socket connected`);
console.log(`${socket.id}: computation started`);
await longRunningTask();
console.log(`${socket.id}: computation completed`);
socket.on('disconnect', () => {
console.log(`${socket.id}: socket disconnected`);
// TODO: Check if `longRunningTask` has resolved. If it has not, cancel it
});
});
这是给定用户在longRunningTask 解析之前断开连接的程序的当前流程:
用户访问网站(他们被分配了 socket.id tCzH)
tCzH: socket connected
tCzH: computation started
用户断开连接
tCzH: socket disconnected
一段时间过去了
tCzH: computation completed
我的目标是在套接字断开的情况下立即终止longRunningTask。最好的方法是什么?
【问题讨论】:
-
你应该先监听
disconnect事件之前等待longRunningTask完成:-)
标签: javascript node.js async-await promise cancellation