Подумайте о вызове новой функции в строке myBoard=id
, например, parseNewId(id);
, и добавьте туда следующую логику. Это потому, что var dyn_ns...
выполняется сразу после инициализации socket.on(...)
, а не после ее завершения. Так что myBoard еще нет.
Извините, я пропустил скобки ... Но все же вам нужно переместить логику after-id-get внутри этой функции routeToBoard
.
EDIT
«Идея»:
var res = document.getElementById("res");
res.innerHTML +="<br/>Init";
ioOn('connection', function (socket) {
res.innerHTML +="<br/>ioOn callback";
socketOn('joinDynNs', function (data, join_cb) {
res.innerHTML +="<br/>socketOn callback";
var myBoard = 111;
routeToBoard("alex", "123", function (id) {
res.innerHTML +="<br/>routeToBoard callback";
myBoard = id;
//var dyn_ns = io.of('/' + myBoard).on('connection', function (ns_socket) { console.log('user connected to ' + myBoard); });
});
join_cb({ namespace: myBoard });
});
});
function delayMe()
{
var c=0
for(var i=0;i<10000000;i++)
c += i*Math.random();
}
function ioOn(string, callback)
{
res.innerHTML +="<br/>ioOn body";
delayMe();
callback("socket");
}
function socketOn(string, callback)
{
res.innerHTML +="<br/>socketOn body";
delayMe();
callback("data",function(obj){alert("3"+" obj.namespace: " + obj.namespace)});
}
function routeToBoard(userId, passw, cb) {
res.innerHTML +="<br/>routeToBoard body";
delayMe();
var boardId = 0;
var users = fkc1('data/users.db', function(){
res.innerHTML +="<br/>fkc1 callback";
usersFind({
user: userId,
pass: passw
}, function(err, results) {
res.innerHTML +="<br/>userFind callback";
cb(666);
});
});
}
function fkc1(string,callback)
{
res.innerHTML +="<br/>fkc1 body";
delayMe();
callback();//no params callback
}
function usersFind(credentials,callback)
{
res.innerHTML +="<br/>userFind body";
delayMe();
callback("er","result");
}
Не думаю, что это полезно. Просто основная идея проверить, все ли переменные переданы правильно. К сожалению, я не знаю эту библиотеку node.js, но эта концепция не нова для меня.
Поместите также <div id="res" ></div>
в раздел тела, чтобы увидеть результаты ...