2017-09-26 64 views
0

我對Node js非常新,嘗試使用for循環迭代集合中的每個項並將數據插入到數據庫。迭代集合對象並使用節點j插入到db

而我已經實現了下面的代碼,但它只插入集合中的最後一個對象。

我也想抓住了爲每個請求參數值..和我需要與要求

沒有任何一個節省我的時間映射。

以下是代碼。

 app.post('/api/upload/UpdateQualityExcel',function(req,res){ 

      UpdateQualityExcel_Flag = req.param('Flag'); 

      body_data=req.body; 

      UpdateQualityExcel_res_data=[]; 

       // var i=1; 
      for(i=0;i<body_data.EXCEL_ROWS.length;i++) 
      { 

       Postdata(UpdateQualityExcel_Flag, body_data.EXCEL_ROWS[i], function(id) { 
        console.log(id);  
       }); 

      } 

     }); 


     function Postdata(UpdateQualityExcel_Flag, EXCEL_ROWS, cb) { 

      sql.close(); 
      sql.connect(config, function (err) { 

       if (err) console.log(err); 
        //create Request object 
       var request = new sql.Request(); 

       console.log(EXCEL_ROWS); 

       request.input('p_Flag', sql.VarChar, UpdateQualityExcel_Flag) 
       request.input('p_ProjectCode', sql.NVarChar, EXCEL_ROWS.PROJECT_CODE); 
       request.input('p_ActivityId',sql.INT,EXCEL_ROWS.ACTIVITY_ID); 
       request.input('p_ActivityName', sql.VarChar, EXCEL_ROWS.ACTIVITY_NAME); 
       request.output('po_Message',sql.VarChar) 

       // query to the database and get the records 
       request.execute("[dbo].[ARA_SP_ACTION_QualityExcelUpdate]").then(function(recordSet) { 

         if (recordSet == null || recordSet.length === 0) 
         return; 

        // res.send(recordset); 
        cb("test"); 


       }).catch(function (err) {   
        console.log(err); 

       }); 
      }); 
     } 

回答

0

Postdata是異步的,我們可以看到,我們同時運行它的多個實例。

被說,他們都使用全局變量sql。我敢打賭,這裏有一些衝突。

第一個Postdata打開連接,以推動然後Postdata關閉它的其他實例。

我建議您繼續這樣:

  • 打開連接
  • 執行所有刀片同時
  • 關閉連接

編輯

下面是一些代碼,以幫助您完成您的問題,它是一個開始明顯:)

function postdata(UpdateQualityExcel_Flag, EXCEL_ROWS) { 
    return new Promise((resolve, reject) => { 
    // 
    // ... do stuff ... 
    // 
    request.execute("[dbo].[ARA_SP_ACTION_QualityExcelUpdate]") 
     .then(resolve) 
     .catch(reject); 
    }); 
} 

// Call all postData 
Promise.all(body_data.EXCEL_ROWS.map(x => postData(UpdateQualityExcel_Flag, x))) 
    .then((rets) => { 
    // All your answers are here 
    }) 
    .catch((err) => { 
    // You got here in case of error 
    }); 
+0

感謝這麼多..我也想抓住了爲每個請求參數值..和我需要映射請求 – user3301440