我在下面的代码写了一个文件:
模型/ exported.js
module.exports = {
processedList: function(store_name) {
var t;
var tradeIds = exported.find({storename: store_name}, function (err, value) {
if (err) return console.error(err);
return value;
}).select('tid -_id');
}, // Export connection here
};
我在路线中有另一个档案
路由/ exported.js
var exported = require('../models/exported.js');
var tradeIds = exported.processedList(storename);
console.log('simer'+tradeIds);
}
但我在console.log中未定义。如果不是在处理列表中的return语句,而是编写console.log,那么结果将获得控制台。但我的要求是将数据从模型文件返回到路由文件。
我是表达js的新手。
我的指导将受到高度赞赏。
答案 0 :(得分:1)
您正在异步环境中尝试同步操作。当您尝试控制日志processedList
时,tradeIds
可能已完成,也可能未完成。 NodeJS不会等待它完成,因为它本质上是异步的(根据设计,它不是一个bug)。您可以传递回调而不是以这种方式执行。
<强>模型/ exported.js 强>
module.exports = {
processedList: function(store_name, cb) {
var t;
var tradeIds = exported.find({storename: store_name}, function (err, value) {
if (err) return cb(err);
cb(null, value);
}).select('tid -_id');
}, // Export connection here
};
<强>路由/ exported.js 强>
var exported = require('../models/exported.js');
exported.processedList(storename, function(err, results) {
if (err) { console.log(err); }
console.log(results);
});
这可确保console.log
仅在processedList
完成执行时发生。
答案 1 :(得分:1)
根据您的问题,您希望从路由调用函数并从您的函数获取返回响应以进行路由。简单使用回调函数。
<强> models/exported.js
强>
module.exports = {
processedList: function (store_name, callback) {
var t;
var tradeIds = exported.find({storename: store_name}, function (err, value) {
if (err) {
callback("error", err)
} else {
callback("success", value)
}
}).select('tid -_id');
}
}
<强>路由/ exported.js 强>
var exported = require('../models/exported.js');
exported.processedList('storename', function (err, results) {
if (err == 'error') {
console.log(err);
} else {
console.log(results);
}
});