0

我在服務器端的Node.js,並以某種方式陷入回調。我使用下面的函數在表與MySQL PKG插入數據:

connection.query('INSERT INTO tableName SET ?', post, function(err, result) 
    { 
    if (err) { 
     if (err.code === 'ER_DUP_ENTRY') 
     { } 
     else 
     { throw err; } 
    } 
    }); 

我想記錄多少重複的條目不存在回採其中由$。每次調用這個函數以上的循環。

它說here,我有3種可能性:拋出,回調和EventEmitter。投擲是行不通的,因爲這會阻止一切。我用回調試了一下,但是因爲我在$ .each的回調中,所以我不能在上面的範圍中找到。我沒有嘗試使用靜態EventEmitter,因爲我不知道如何從$ .each選擇器中返回任何值,但選定的數據除外。

任何建議將appriciated。

回答

1

巢一切都在一個封閉和計數完成的查詢回調,讓你知道在最後一次查詢完成後:

(function(){ 
    var errors = 0; 
    var started = 0; 
    var successful = 0; 
    $.each(..., function(){ 
    started++; 
    connection.query('INSERT INTO tableName SET ?', post, function(err, result) 
    { 
     if (err) { 
     if (err.code === 'ER_DUP_ENTRY') 
      { errors++; } 
     else 
      { throw err; } 
     } else { successful++;} 
     if (started == successful + errors) { 
     // all done 
     console.log(errors + " errors occurred"); 
     } 
    }); 
    }); 
})(); 
+0

謝謝:)我的大腦在我猜的方式得到了一點。這是我的目的,因爲我只想記錄此計數器。不過,如果我使用這個值來計算來自$ .each之外的東西。我是否總是必須處理這個問題,深入嵌套函數還是有其他方法? – k4yaman

+0

你的意思是$ .each以外是什麼意思? – Gavriel

+0

這僅僅是一個例子,另一個例子是: 當最後一個查詢的異步函數完成時,還有另一種方法來編寫「導入完成」,然後在此嵌套函數中進行計算,直到最後。 – k4yaman