2014-02-11 6 views
3

저는 node.js와 redis를 사용하여 매우 간단한 클라이언트/서버 응용 프로그램을 처음으로 구축합니다. 성공적으로 redis 클라이언트와 http 서버를 작동시킨 후, redis 클라이언트로 간단한 SET/GET을 시도합니다.Redis GET 함수가 undefined를 반환합니다.

은 내가 먼저 수행합니다 Reply:Ok 반환

client.set('apple', 10, redis.print); 

합니다.

즉시 후, 나는 실행 :

client.get('apple', function(err, reply) { 
    count = parseInt(reply); 
    return count; 
}); 

이 이상하게 count을 인쇄에, 나는 undefined를 얻을.

client.get('apple', redis.print); 

Reply: 10 콘솔에 반환됩니다, 나는 같은 redis.print를 사용하는 경우. 10도 내가 console.log(count)을 수행하면 나타납니다.

내가 모듈에서 설정 기능을 남용했지만,이 두 가지를 참조 후, 내가 무엇 확실하지 오전 내 오류의 원인 어쩌면 생각

:

node_redis - github readme

redis.io API - GET

답변

2

시를 카운트 출력, 나는 정의되지 않는다.

client.get('apple', function(err, reply) { 
    count = parseInt(reply); 
    return count; 
}); 

console.log(count); // is this where you get undefined? 
        // count at this point is, in fact, undefined, 
        // because it's set in a callback which was not yet fired. 

나는 Node.js를에서 프로그램을하지 않는, 그래서 콜백에서 수를 반환 의 장점에 대해 확실하지 않다. 어디로 돌려 주겠습니까? 이런 식으로되어 있지 않니?

client.get('apple', function(err, reply) { 
    count = parseInt(reply); 
    // do something with the count here. Print it or whatever. 
}); 

또는 클로저에 트랩 할 수 있지만 콜백이 돌아오고 변수를 설정할 때까지 기다려야합니다. 그것이 어떻게 행해질 수 있는지 - 나는 모른다.

var count = null; 
client.get('apple', function(err, reply) { 
    count = parseInt(reply); 
}); 

// TODO: wait for callback 
console.log(count); 
+0

node.js를 사용하면 콜백 완료를 기다리지 않아도됩니다. 일반적으로 함수는 매개 변수로 콜백을 가져야하며,이 콜백은 count를 매개 변수로 사용하여 호출해야합니다 (무의미한 "반환 횟수"대신). 이것은 CPS (연속 통과 스타일)입니다. –

관련 문제