【问题标题】:How to return data from the callback nodejs如何从回调nodejs返回数据
【发布时间】:2014-10-30 07:58:45
【问题描述】:

如何从内部回调返回,在下面的场景中,正在返回一个 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 数据

【问题讨论】:

  • 你不能从回调中返回数据
  • 完成处理时有没有办法记录json
  • 当然,只需将“return json”替换为“console.log(json)”
  • 从调用函数,其他模块将使用此数据
  • 不,它不会,除非您将其他模块提供给回调。在异步中,您需要对数据采取行动,而不是传统的将数据采取行动的方法。

标签: javascript json node.js


【解决方案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
})

【讨论】:

【解决方案2】:

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

例子:

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);
});

【讨论】:

    【解决方案3】:

    如果您首先使用 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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 2016-01-07
    相关资源
    最近更新 更多