gpt4 book ai didi

javascript - Socket.IO 的 once 函数无法正常工作

转载 作者:行者123 更新时间:2023-11-30 12:39:05 25 4
gpt4 key购买 nike

我的目的是使用 Node.js + Socket.IO 制作一个聊天应用程序,但我遇到了一个困难。问题是 minus 事件不能正常工作(结果:64 - 12 = 65),但是 plus 事件工作正常(结果:42 + 23 = 65 ).也许问题的原因与 socket.once() 函数有关...但我不清楚答案。

以下是我简化的 Node.js 应用程序的源代码。

app.js:

var http = require('http');
var fs = require('fs');
var socketio = require('socket.io');

var app = http.createServer(function (req, res) {
if (req.url === '/') {
fs.readFile(__dirname + '/index.html', function (err, result) {
if (err)
throw err;

res.writeHead(200, {
'Content-Type': 'text/html'
});
res.end(result);
});
} else {
res.writeHead(404);
res.end();
}
});

app.listen(3000, function () {
console.log('The server running on port 3000.');
});

var io = socketio(app);
io.on('connection', function (socket) {
socket.on('plus', function (param) {
socket.emit('result', param.a + param.b);
});

socket.on('minus', function (param) {
socket.emit('result', param.a - param.b);
});
});

index.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title></title>
<script src="http://cdn.socket.io/socket.io-1.0.6.js"></script>
<script>
var socket = io();

socket.emit('plus', {
a: 42,
b: 23
});

socket.once('result', function (result) {
var div = document.createElement('div');
div.innerText = '42 + 23 = ' + result;
document.body.appendChild(div);
});

socket.emit('minus', {
a: 64,
b: 12
});

socket.once('result', function (result) {
var div = document.createElement('div');
div.innerText = '64 - 12 = ' + result;
document.body.appendChild(div);
});
</script>
</head>
<body>
</body>
</html>

结果:

42 + 23 = 65
64 - 12 = 65

谢谢。

最佳答案

因为您同时在“结果”上绑定(bind)了两个事件回调。

<script>
var socket = io();

socket.emit('plus', {
a: 42,
b: 23
});

socket.once('result', function (result,obj) {
var div = document.createElement('div');
div.innerText = '42 + 23 = ' + result;
document.body.appendChild(div);

socket.emit('minus', {
a: 64,
b: 12
});
socket.once('result', function (result,obj) {
var div = document.createElement('div');
div.innerText = '64 - 12 = ' + result;
document.body.appendChild(div);
});
});
</script>

关于javascript - Socket.IO 的 once 函数无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25115074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com