基本上我需要将一个参数从一个回调传递给另一个回调。 这是代码:
var main = io
.of('')
.on('connection', function(socket){
socket.on('joinDynNs',function(data,join_cb){
var myBoard=0;
routeToBoard("alex", "123", function(id) {
myBoard=id;
});
var dyn_ns = io.of('/' + myBoard)
.on('connection', function(ns_socket){console.log('user connected to ' + myBoard);});
join_cb({namespace:myBoard});
});
});
我的问题是我无法将routeToBoard中的“id”传递给myBoard变量。有人能帮我吗? 提前谢谢!
我的routeToBoard功能是:
function routeToBoard(userId, passw, cb) {
var boardId = 0;
var nStore = require('nstore/lib/nstore').extend(require('nstore/lib/nstore/query')());
var users = nStore.new('data/users.db', function() {
users.find({
user: userId,
pass: passw
}, function(err, results) {
if (err) {
boardId = -1;
console.log(err);
} else {
boardId = results.digitboard.board;
}
cb(boardId);
});
});
};
答案 0 :(得分:0)
考虑在myBoard=id
行调用新函数,例如parseNewId(id);
并将其放在下一个逻辑中。 这是因为
对不起,我错过了括号......但是你还需要在var dyn_ns...
在socket.on(...)
初始化之后执行,而不是在它完成之后执行。所以myBoard还没有。routeToBoard
函数中移动你的id-id-get逻辑。
修改
'想法':
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>
放入正文部分以查看结果......