2014-08-28 2 views
0

키 값을 삽입하고 가져 오는 파일이 있습니다 ("file1"이라고합니다).콜백 - 정의되지 않았습니다.

var rdb; 

module.exports = function(_app) {  
    rdb = redis.createClient(); 
    return module.exports; 
} 


module.exports.parse = function (name, callback) { 
     rdb.set(name, 'myValue', function(err, data) { 
      console.log("SET:", err, data); 
     }); 
     rdb.get(name, function(err, value) { 
      callback(err, value); 
     }); 
} 

을하지만 다른 파일 내 구문 분석 함수를 호출하고있을 때 그것은 정의되지 않은 구문 분석 말한다 : 그래서 나는 여기 FILE1 내 구현을

var f1; 
module.exports = function(_app) { 
    app = _app;  
    f1 = require('./file1.js')(_app); 
}; 



f1.parse('test', function(err, data){ 
    console.log(err, value);   
}); 

내가 잘못 아무것도 건가요?

+0

감사합니다. 이제 구문 분석은 정의되지 않았다고 말하지 않습니다. 그것은 내 기능으로 간다. 내가 설정하고 Redis key, value pair를 얻는 방법에 문제가있는 것 같다! rdb.get (name, function (err, value) {...}가 작동하지 않습니다 ... –

답변

1

타이밍. function(_app) {...} 안에 f1.parse...을 넣으십시오. 로드되기 전에 f1.parse을 사용하고 있습니다.

e.e. 파일이로드 될 때,이 상황이 발생합니다

  • f1 일부 기능으로 정의된다
  • module.exports
  • 을 선언 (참고 : 함수가 아직 실행되지 않으므로 f1 = require(...)가 발생하지 않습니다)
  • f1.parse를 호출 하지만 f1 여전히 undefined

편집입니다 : 짧은 예를 들어, 모든 레디 스 정크없이 :

// a.js 
module.exports = function(_app) {  
    return module.exports; 
} 
module.exports.parse = function (name, callback) { 
    console.log("parse"); 
} 

// b.js 
module.exports = function(_app) { 
    var f1 = require('./a.js')(_app); 
    f1.parse('test', function(err, data){ console.log(err, value); }); 
}; 

// c.js 
require('./b.js')("foo"); 

run node c.jsparse가 나오고 오류가 없습니다.

+0

감사합니다 @Amadan; 여러분이 말하는 것은 말이됩니다!하지만 여전히 module.exports = function (_app) { 앱 = _app; F1에 필요한 = ('./ file1.js') (_ 앱) f1.parse ('검사'기능 (ERR 데이터) { CONSOLE.LOG (ERR, 값)} ) ; } 여전히 구문 분석이 정의되어 있지 않습니다. –

+0

죄송합니다. 노드가 새로 생겼지 만 console.log ("parse")는 콜백 ("parse")이 아니어야합니다. –

+1

아니요, 콜백을 무시하고 있습니다. 화면에 무엇인가를 출력 해'parse' 함수가 성공적으로 호출되었음을 알 수 있습니다. 물론, 제대로 접근 할 수 있는지 확인한 후에'parse' 안에서 원하는 것을 할 수 있습니다. – Amadan

관련 문제