私は、実行する前に設定する他のコードに依存しているコードを持っています。続行する前に、サーバーからアイテムが送信されるまでDOMを待つように制限するにはどうすればよいですか?私はwhile文を試しましたが、 "call stack exceeded"例外が発生します。私もsetTimeOutを試していますが、render()は機能しますが、selfIdがまだ定義されていないことを示すレンダリング内で例外が発生します。どのように私はこのものを回避することができますか?socket.io:値を設定する方法
例: クライアント:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
<link href="client/main.css" rel="stylesheet"</link>
</head>
<body>
<div id="game">
<!--GAMEBOARD-->
<canvas id="ctx"></canvas>
<!--CHATUI-->
<div id="chat" class="chat">
<div id="messages" class="messages">
<div>Welcome to Simon's Game Server</div>
</div>
<input id="chatinput" class="chatinput"></input>
</div>
<div id="fps"></div>
<!--ADDITIONALUI-->
</div>
<script>
var socket = io();
//game loop
var lastTime;
function gameLoop() {
}
//init
var selfId = null; //How do i set this variable when the first user connects? This is my question
socket.on('setSelf', function (data) { //this is my attempt, but it is not working for the first user.
console.log('Setting selfId to: ' + data.id);
selfId = data.id;
gameLoop();
});
</script>
</body>
</html>
サーバー:何かが起こるまで、JavaScriptで
var express = require('express');
var app = express();
var server = require('http').Server(app);
var port = 1338;
var io = require('socket.io')(server);
//routes
app.get('/', function (req, res) {
res.sendFile(__dirname + '/client/index.html');
});
app.use('/client', express.static(__dirname + '/client'));
server.listen(port);
var UNIQUEID = 0;
io.sockets.on('connection', function (socket) {
socket.myid = UNIQUEID;
UNIQUEID++;
socket.emit('setSelf', { id: socket.myid });
});
'setSelf'の内部で' gameLoop(); 'をなぜ呼び出さないのですか? – monkeyinsight
私はこれを試しましたが、まだプロジェクトをビルドし、最初にサーバーにヒットし、コンソールでselfIdをエコーすると、定義されていません。 なぜですか? – simon