异步控制器航行.js
asynchronous controllers sails.js
变量 obj 仍然清空到控制台.log ( obj) ,我如何完成 ahcer 搜索并打印包含所有数据的变量?
'showservices': function (req, res, next) {
Service.find(...., function (err, services) {
if (err) return next(err);
var obj = [];
_.each(services, function(s){
SaleDetail.find({id_service:s.id_service}, function (err, details){
var total = 0
var cont = 0
_.each(details, function(d){
total = total + parseFloat(d.fullPrice);
cont ++;
});
obj.push({
name: s.serviceName,
cant: cont,
total: total,
});
console.log(obj)
});
});
console.log(obj)
});
},
请使用async
'showservices': function (req, res, next) {
async.auto({
services: function(callback){
Service.find(....).exec(callback);
},
result: ['services', function(callback,results){
var obj = [];
async.each(results.services, function(s, innercb){
SaleDetail.find({id_service:s.id_service}).exec(function(err, details){
var total = 0
var cont = 0
_.each(details, function(d){
total = total + parseFloat(d.fullPrice);
cont ++;
});
obj.push({
name: s.serviceName,
cant: cont,
total: total,
});
innercb();
});
}, function(err){
callback(err, obj);
});
}],
}, function(err,result){
if (err) return next(err);
console.log(result.result);
});
},
在你的代码中有几件事,我用一段可以帮助你解决问题的代码做了一个jsbin(当然不是在jsbin上工作),仔细阅读我添加的注释。
http://jsbin.com/howanojoka/1/edit?js
我做了几个中间输出,如果这不能解决您的问题,请控制台记录适合您的修改代码的输出。
这是那些不想访问jsbin的代码副本:
'showservices': function (req, res, next) {
Service.find('', function (err, services) {
if (err) return next(err);
//we are in sails so lets log properly
sails.log.info(services.length); //if 0 your problem may be here...
var serLen=services.length ; //storing the value of length for checking completin (faster than calling each time services.length ;)
var obj = [];
var completeService=0;
_.each(services, function(s){
SaleDetail.find({id_service:s.id_service}, function (err, details){
//are you sure you have no error here ....
if(err) return next(err); //why not here ?
//again are you sure you have a result
sails.log.info(details.length);//if 0 your problem may be here as well
var total = 0
var cont = 0
_.each(details, function(d){
total = total + parseFloat(d.fullPrice); //you could write total+=parseFLoat(d.fullPrice); just an info :)
cont ++;
});
obj.push({
name: s.serviceName,
cant: cont,
total: total,
});
sails.log.info(obj)//let's use sails log again :)
completeService++;
if(completeService===serLen){
sails.log.info(obj)//here is your completed object
return next();
}
});
});
//your global problem i assume is when to "return" as you have async ? so i gave a try look abovee:)
sails.log.info(obj)//this will be executed before any or some SaleDetail.find() as as your SaleDetail.find is async, in clear empty array
});
},
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 强制模板刷新ember.js
- 如何编写HTML输入的JS内联
- Angular JS IE9 Hashbang url rewriting
- 使用JS将数组转换为json对象
- Node.js v6.2.0类扩展不是函数错误
- 当js函数's已执行
- 要求未定义JS回调参数
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 如何从Java/scala调用js美化程序
- 如何更改<svg>标记为<img>用js标记
- 如何使用 node.js 比较两个 json 数组
- 航行中的自定义中间件.js
- 异步控制器航行.js
- Node JS航行两个不同的数据库
- 航行.js:文件访问