回调 - 未定义

时间:2014-08-28 02:02:46

标签: javascript node.js redis

我有一个文件,(我们称之为" file1")我插入一个键值并获取它;所以这里我有我的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);
        });
}

但是当我在另一个文件中调用我的解析函数时,它表示解析未定义:

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



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

我做错了吗?

1 个答案:

答案 0 :(得分:1)

时序。将f1.parse...放在function(_app) {...}内。您在加载前使用f1.parse

即。当你的文件加载时,会发生这种情况:

    宣布
  • f1
  • module.exports被定义为某个函数(注意:函数尚未执行,因此f1 = require(...)不会发生)
  • f1.parse已被调用,但f1仍为undefined

编辑:一个简短的例子,没有所有Redis垃圾:

// 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");

运行node c.jsparse出来,没有错误。