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