如何从回调nodejs返回数据

时间:2014-10-30 07:58:45

标签: javascript json node.js

如何从内部回调返回,在下面的场景中,json数据正在返回,当我尝试执行console.log时,它打印 [Function] 而不是 json值

exports.tests = function(tagName, out) {

    model.findbyTag(tagName, function(data) {

        var json = {
            "name" : 'java',
            "data" : "SomeData"
        }

        return json;

    });

}

console.log(this.tests)

输出

[Function]

我正在做什么错误,当这个方法执行时应该返回json数据

3 个答案:

答案 0 :(得分:1)

module.exports = function() {

    var _return  = {};

    _return.someName = function(tagName ,callback){
        model.findbyTag(tagName, function(err ,data) {
            var json = {
                "name" : 'java',
                "data" : "SomeData"
            }
            callback(json);
        });
    }

    return _return ;
}

您可以在其他文件中使用上述代码:

var sample_file = require('above code file address');

sample_file.someName(someTagName , function (data) {
    console.log(data) // this data is the json data
})

答案 1 :(得分:0)

你不能从回调中返回数据,而是应该将一个函数传递给可以在回调中调用的方法中的结果。

示例:

exports.tests = function(tagName, out, returnFunction) {

    model.findbyTag(tagName, function(data) {

        var json = {
            "name" : 'java',
            "data" : "SomeData"
        }
        // Call the returnFunction instead of trying to return data
        returnFunction(json);

    });

}

然后将其称为:

this.tests('tagName', 'out', function(r) {
    // Where "r" is the result of the callback
    console.log(r);
});

答案 2 :(得分:-1)

如果您在第一个位置使用Node,则需要使用Node发射器。

const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();
myEmitter.on('event', (someProps) => {
  console.log('an event occurred!');
});
myEmitter.emit('event', {...someProps});

然后您可以访问json并调用所需的任何进一步操作。使用事件可能会让您稍微重组您的应用程序。 https://nodejs.org/docs/latest/api/events.html#events_emitter_on_eventname_listener