2014-10-11 53 views
1

我正在開發一個項目,在該項目中,我必須在多個表中存儲多個站點,一個路徑及其關係。我成功地存儲了停靠點和路線。而是存儲我需要獲取最近存儲的路線的id(自動生成的主鍵)和所有最近存儲的停靠點的關係。我通過運行查詢來查找它們以查找最新存儲的id的最大id。這是我的代碼:Sails.js查詢在函數結尾處運行

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); 
     }); 

    } 

我面臨的問題是,得到的查詢在函數運行結束無論身在何處,我把他們的功能。由於這個原因,我無法使用我從查詢中得到的ID。任何在這方面的幫助將不勝感激。

我面臨的另外一個問題是,從busstop表中得到max(stopId)的查詢將返回舊數據的值。有時從routes也有這個問題。

請幫我解決這個問題。

回答

2

你的問題是一個非常常見的情況,不知道如何在Node.js中使用異步函數。您的查詢是異步的,這意味着節點將運行這些查詢並繼續在您的頁面上執行其餘代碼。但是頁面上的其他代碼依賴於查詢中的值。一個常見的解決方案是使用一個庫像異步

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

我想通過這些閱讀以瞭解更多

http://nodeschool.io/#learnyounode

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