2011-08-31 60 views
0

傳遞參數基本上我需要從一個回調將參數作爲結果到另一回調。 下面是代碼:從回調

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}); 
    }); 
    }); 

我的問題是我無法通過「ID」從routeToBoard到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

我剛剛更新了我的帖子.... – profesoralex

回答

0

考慮在myBoard=id行調用新的功能,如parseNewId(id);並把有你的下一個邏輯。 這是因爲 var dyn_ns...socket.on(...)初始化剛過,它的完成後不執行。所以myBoard還沒有。 對不起,我已經錯過了括號......但你仍然需要移動routeToBoard函數內部後-ID-得到邏輯。

編輯

的 '觀念':

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>放入身體部分看看結果...

+0

是的,但我的問題是我有誰需要板卡ID PARAM另一個功能,當我試圖把VAR dyn_ns = io.of(「/」 + myBoard) 。對( 'connection',function(ns_socket){console.log('user connected to'+ myBoard);}); join_cb({namespace:myBoard});到routeToBoard功能不起作用.... – profesoralex

+0

你仍然可以調用從內'routeToBoard'功能,在這裏你已經得到ID這些功能;或者,如果這些功能不是連續的,則將ID存儲在所有功能可訪問的值中。 – szamil

+0

我剛準備你的代碼的簡化版本,它工作正常,但我沒有任何延遲,我以爲你有。可能您必須檢查node.js庫文檔以獲取更多信息。 – szamil