2017-10-05 43 views
0

我是帶有MySQL數據庫的NodeJS的新手,我想執行嵌套查詢的代碼。 這個場景是我必須得到不完整交易的列表,然後通過使用迭代循環迭代我從數據庫收到的列表。 在循環中有更多的查詢正在執行,並調用第三方API來獲取返回回調數據的數據。現在問題是回調異步執行,循環不等待回調返回數據,它繼續前進。 請在我遇到這種情況時請指導我。處理嵌套查詢NodeJS中的MySQL回調

這裏是我的代碼

var sql = incompleteTradesQuery.getIncompleteTrades(); 
    sqlConn.query(sql, function (err, data) { 
     if (err) { 
      console.log(err); 
     } 
     else { 
      for (var i = 0; i < data.length; i++) { 
       bittrexExchange.getOrder(data.order_uuid, function(err, order_data) { 
       if (order_data.result.IsOpen != true) { 
       var order_sql = tradesQuery.insertTrade(order_data.result.OrderUuid, order_data.result.Exchange, data.customer_id, order_data.result.Quantity, order_data.result.QuantityRemaining, order_data.result.Limit, order_data.result.Reserved, order_data.result.ReserveRemaining, order_data.result.CommissionReserved, order_data.result.CommissionReserveRemaining, order_data.result.CommissionPaid, order_data.result.Price, order_data.result.PricePerUnit, order_data.result.Opened, order_data.result.Closed, order_data.result.IsOpen, null, data.commission_fee, data.total_transfer, new Date()); 
       sqlConn.query(order_sql); 

       var incomplete_trades_query = incompleteTradesQuery.deleteIncompleteTradesById(data.id); 
       sqlConn(incomplete_trades_query); 
      } 
      }); 
      } 
     } 
    }); 
+1

的可能的複製[JavaScript的閉合環內 - 簡單實用示例](https://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) –

回答

2

因爲,從根本上的NodeJS工作在異步特性,您的嵌套查詢也將是異步的,這將是一個痛苦的任務寫入回調鏈。一個簡單的回答你的問題將是use promises

此外,我會建議您使用異步方式來處理您的多個查詢,這無疑將比處理查詢/請求的同步方式工作得更快。

NodeJS還提供了async.js模塊,將解決您的問題。 QStep也是很好的包來處理你的嵌套回調代碼。

https://code.tutsplus.com/tutorials/managing-the-asynchronous-nature-of-nodejs--net-36183

+0

可以你爲我提供瞭如何在我自己的代碼中使用它的代碼片段? –