2013-08-25 144 views
0

使用node.js,我連接到我的redis數據庫並將值返回給數組。但是,爲了返回值,我必須使用回調函數將它們移出範圍。我見過很多關於回調函數的例子,而我的工作就像所見過的所有其他例子一樣,但是,當我在res.render中調用該函數作爲選項時,它會嘗試返回父函數而不是回調函數。如何將回調函數的值返回到players:選項?Javascript回調返回值

父函數

function openPlayers(callback) { 
    var players = []; 
    db.hgetall("players", function(err, objs) { 
    // Objects of Response 
    for (var k in objs) { 
     // Items are the individual key-value object 
     var newPlayer = {}; 
     var items = JSON.parse(objs[k]); 
     for (var x in items) { 
     // x is the key for each object 
     newPlayer[x] = items[x]; 
     } 
     players.push(newPlayer); 
    } 
    callback(players); 
    }); 
} 

回調函數

exports.newPlayer = function(req, res) { 
    res.render('newPlayer', { 
    title: 'New Player', 
    players: (openPlayers(function(ps) { //callback function 
       return(ps); 
      })) 
    }); 
}; 
+3

從異步回調返回是沒用的。您必須反轉邏輯,並從您的回調中調用res.render。 – bfavaretto

回答

4

好位置,你不能因爲openPlayers是異步並且不返回任何值,這就是爲什麼它需要回調。然而,你可以做的事情是這樣的:

exports.newPlayer = function(req, res) { 

    openPlayers(function (ps) { 
     res.render('newPlayer', { 
      title: 'New Player', 
      players: ps 
     }); 
    }); 
}; 
+1

好的,好的...這個異步的東西很荒謬。非常感謝這個偉大的答案! –