Câu trả lời ngắn gọn là bạn không suy nghĩ không đồng bộ. Vì bạn đang sử dụng các hàm không đồng bộ trong hàm của mình, nên hàm của bạn cũng phải không đồng bộ.
Vì bạn không đăng phần còn lại của mã của mình, đây là ý tưởng cơ bản:
var client = require('redis').createClient();
function createMobs(callback) {
var mobObject = { name: 'Goblin' };
client.hmset('monsterlist', 'mobs', JSON.stringify(mobObject), function(err) {
// Now that we're in here, assuming no error, the set has went through.
client.hgetall('monsterlist', function(err, object) {
// We've got our object!
callback(object);
});
// There is no way to run code right here and have it access the object variable, as it would run right away, and redis hasn't had time to send you the data yet. Your myMobs function wouldn't work either, because it is returning a totally different function.
});
};
app.get('/create', function(req, res) {
createMobs(function(object) {
res.render('mobs.jade', {
mobs: object
});
});
});
Hy vọng rằng điều đó sẽ giúp mọi thứ sáng tỏ.