【问题标题】:Sails.js query runs at end of functionSails.js 查询在函数结束时运行
【发布时间】:2014-12-06 16:08:48
【问题描述】:

我正在做一个项目,我必须在 3 个不同的表中存储多个站点、一条路线及其关系。我成功地存储了站点和路线。但要存储关系,我需要获取最近存储的路线和所有最近存储的站点的 id(自动生成的主键)。我通过运行查询来查找最大 id 来获取它们,这是最新存储的 id。这是我的代码:

create: function (req,res,next)
    {

        var stopsArray = req.param('latLngArray');

        var so="";
        var totalBusStops = req.param('totalStops');

        var routeToSave=new OneRoute();
        routeToSave.routeName="This route";
        routeToSave.totalStops=totalBusStops;

        Routes.create(routeToSave, function routeCreated(err, routeToSave){
            if(err) return next(err);
                res.json(routeToSave); 
        });   // creating routes

        for(var i=0;i<stopsArray.length;i++){
            var us = new busStop();
            us.lngPos = stopsArray[i].Lng;
            us.latPos = stopsArray[i].Lat;

            BusStop.create( us ,function stopCreated (err,us)
            { 
                if(err) return next(err);
                res.json(us);   
            });  // creating bus stops#
        }

        var currentRouteId = "";
        Routes.query("select max(routeId) from routes",  function(err, results) {
            if(err){ res.json({ error: err.message }, 400);}
            else{
                currentRouteId = results[0]['max(routeId)'];
                console.log("route ID: "+results[0]['max(routeId)']);
            }
        });   // max riute ID

        var relation= new routeStopR();
        relation.routeId=currentRouteId;
        var currentStopId = "";

        BusStop.query("select max(stopId) from busstop",  function(err, results) {
            if(err){res.json({ error: err.message }, 400);}
            else{

                currentStopId = results[0]['max(stopId)'];
                console.log("Bus Stop ID: "+currentStopId);
            }
        });

        relation.stopId=currentStopId;

        console.log("");
        console.log("relation Route: "+relation.routeId);
        console.log("relation Stop: "+relation.stopId);


        RouteStops.create(relation,function relationCreated (err,relation)
        {
            if(err) return next(err);
            res.json(relation);
        });

    }

我面临的问题是 get 查询在函数末尾运行,无论我将它们放在函数中的什么位置。因此,我无法使用从查询中获得的 ID。在这方面的任何帮助将不胜感激。

我面临的另一个问题是,从busstop 表中获取max(stopId) 的查询从旧数据返回值。而且有时候routesmax(routeID)也有这个问题。

请帮我解决这个问题。

【问题讨论】:

    标签: mysql node.js sails.js


    【解决方案1】:

    您的问题是一个非常常见的情况,即不知道如何在 Node.js 中使用异步函数。您的查询是异步的,这意味着节点开始运行这些查询并继续执行页面上的其余代码。但是您页面上的其余代码取决于您在查询中找到的值。一个常见的解决方案是使用像 async 这样的库

    https://www.npmjs.org/package/async

    我会通读这些以了解更多信息

    http://nodeschool.io/#learnyounode

    http://javascriptplayground.com/blog/2013/06/think-async/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      相关资源
      最近更新 更多