Javascript 带有socket.io的循环在开头终止
我正在为上传到服务器的小图片构建这个功能。 客户端构建tileBuffer,然后调用fireTiles函数。 在这里,我想基于tileBuffer.length构建一个循环。服务器将处理该控件。因此,我发出StartAddFile,并立即使用另一个Tile事件从服务器回调。调试器显示我已被服务器调用,并且我看到代码进入socket.on('AnotherTile')…语句 问题是,当代码到达AddTileemit函数时,它停止在那里,什么也没有发生。服务器没有收到请求,循环在那里终止 我的代码中的错误在哪里Javascript 带有socket.io的循环在开头终止,javascript,node.js,loops,socket.io,Javascript,Node.js,Loops,Socket.io,我正在为上传到服务器的小图片构建这个功能。 客户端构建tileBuffer,然后调用fireTiles函数。 在这里,我想基于tileBuffer.length构建一个循环。服务器将处理该控件。因此,我发出StartAddFile,并立即使用另一个Tile事件从服务器回调。调试器显示我已被服务器调用,并且我看到代码进入socket.on('AnotherTile')…语句 问题是,当代码到达AddTileemit函数时,它停止在那里,什么也没有发生。服务器没有收到请求,循环在那里终止 我的代码中
function fireTiles (tileBuffer, mapSelected) {
var tiles = tileBuffer.length;
var tBx = 0;
try
{
var socket = io.connect('http://myweb:8080/');
socket.emit('StartAddTiles', tiles, mapSelected);
socket.on('AnotherTile', function (tlN){
if (tlN < tiles) {
var data = tileBuffer[tlN]; //uso tlN per far comandare il server
tBx++; // debug purpose
socket.emit('AddTile', mapSelected, data, tBx);
} else {
// something went wrong
alert('Error calculating tiles');
return;
}
});
}
catch(err)
{
document.getElementById('status').innerHTML = err.message;
}
}
事件名称区分大小写,您可能应该在服务器端使用
AddTile
而不是AddTile
。您也可以显示服务器端代码吗?我觉得非常愚蠢;-)谢谢,不应该这样。这种事经常发生
io.sockets.on('connection', function(client) {
console.log('Connecting....');
// controls are limited, this is just a beginning
// Initiate loop
client.on('StartAddTiles', function(tiles, mapSelected) {
var mapId = mapSelected;
mapLoading[mapId] = { //Create a new Entry in The mapLoading Variable
tilesToLoad : tiles,
tilesLoaded : 0
}
console.log('Start loading '+mapLoading[mapId].tilesToLoad+' tiles.');
// Ask for the first tile
client.emit('AnotherTile', mapLoading[mapId].tilesLoaded);
//
});
// client add new Tile/Tiles
client.on('addTile', function(mapSelected, data, tBx) {
var mapId = mapSelected;
mapLoading[mapId].tilesLoaded = ++1;
console.log('Adding tile '+mapLoading[mapId].tilesLoaded+' of '+mapLoading[mapId].tilesToLoad+' tBx '+tBx);
// insert Tile
db_manager.add_tiles(tileBuffer, function(result) {
if (mapLoading[mapId].tilesLoaded == mapLoading[mapId].tilesToLoad) { // full map loaded
mapLoading[mapId] = ""; //reset the buffer
client.emit('TilesOk', mapLoading[mapId].tilesLoaded);
} else {
console.log('requesting tile num: '+mapLoading[mapId].tilesLoaded);
client.emit('AnotherTile', mapLoading[mapId].tilesLoaded);
}
//
});
});