Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步控制器sails.js_Javascript_Node.js_Sails.js - Fatal编程技术网

Javascript 异步控制器sails.js

Javascript 异步控制器sails.js,javascript,node.js,sails.js,Javascript,Node.js,Sails.js,变量obj仍然会清空到console.log(obj)中,如何完成ahcer搜索并打印包含所有数据的变量 'showservices': function (req, res, next) { Service.find(...., function (err, services) { if (err) return next(err); var obj = []; _.each

变量obj仍然会清空到console.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)
            });
        },

在您的代码中有几件事,我用一段代码制作了一个jsbin(当然不使用jsbin),它可以帮助您解决问题,请仔细阅读我添加的注释

我做了几个中间输出,如果这不能解决您的问题,请将修改后的代码的输出记录到您的日志中

以下是不想访问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

            });
        },

请使用
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);
    });
},