node.js Redis ПОЛУЧИТЬ

Я пытаюсь получить значение из базы данных Redis. Код:

                                    callback(null, 'Please enter PIN.');
                                    read = db.get(cmd + ':pin');
                                    console.log(read);
                                    n = db.get(cmd + ':name');
                                    waitingType = 'pin';
                                    wait = 1;

Однако, когда я console.log(read), я получаю true. Почему я не получаю значение db.get(cmd + ':pin')?


person whiskers75    schedule 07.08.2012    source источник


Ответы (2)


db.get является асинхронным, поэтому вызов db еще не выполнен, когда ваша программа достигает console.log(read)

person Roest    schedule 07.08.2012
comment
+1, но также добавление примера использования из cdanea, вероятно, было бы полезно для op. - person Zlatko; 13.02.2014

Node предназначен для использования лямбда-функций для передачи обратных вызовов. Попробуйте передать остальные ваши решения как поведение на различные ответы:

read = db.get(cmd + ':pin', function(result) {
    console.log(read);
    // like this
    // ... and so on
});

Кроме того, вы можете захотеть изучить Redis немного глубже, вы можете получить все свои поля сразу. См. HMGET. Я думаю, вы можете улучшить структуру ваших сохраненных данных, чтобы лучше соответствовать логике приложения.

// for example:
// set like this, where id is some front stuff you know ahead of time, 
// like the expected username from a login form, that is expected to be unique
// you may concatenate and hash, just make this unique
db.hmset("authData:" + id, {id:'uniqID', pin:0666, name:'that guy'});

// get like this
db.hmget("authData:" + id, function(err, data) {
    console.log(['data will contain id, pin and name keys', data]);
});

//output:
/* [
    'data will contain id, pin and name keys', 
    {id:'uniqID', pin:0666, name:'that guy'}
    ]
*/
person cdanea    schedule 12.02.2014