2014-05-09 56 views
0

我的應用程序旨在掃描代理列表。 當我有一個死代理錯誤事件是調用,但回調或結束事件是永遠不會調用,爲什麼?錯誤事件後繼續Node.js Webkit

var file = e.dataTransfer.files[i].path; 
    content = fs.readFileSync(file, "UTF-8"); 
    var lines = content.split("\n"); 
    var nb = 0; 
    async.each(lines, function(line, callback) { 

     var arr = line.split(":"); 
     http.get({host: arr[0], port: arr[1], path: "http://www.google.fr", agent: false}, function(res, req) { 
      if(res.statusCode == 200){ 
       el.className = ''; 
       el.innerHTML = arr[0] + ':' + arr[1] + '\n'; 
       nb = nb+1; 
      } 
      callback(); 
     }).on('error', function(e) { 
      console.error(arr[0] + ':' + arr[1]); 
     }).on('end', function(e) { 
      console.error('End event nerver load...'); 
     }); 
    },function(){ 
     el.className = ''; 
     el.innerHTML = 'Scan terminé. ' + nb + ' Proxy fonctionnels'; 
    }); 

回答

2

它看起來像你使用的是異步庫。

您傳遞給async.each的迭代器要求您調用回調,而不管是否存在錯誤。如果您不調用回調,異步會認爲該操作仍在運行,並且將永遠等待。

當您遇到錯誤時,您應該調用回調並將錯誤作爲第一個參數傳遞。

所以這裏是我的意思的一個例子。我已將callback(e);添加到您的錯誤事件處理程序中。

}).on('error', function(e) { 
     console.error(arr[0] + ':' + arr[1]); 
     callback(e); 
    }).on('end', function(e) { 
+0

謝謝,但如果我打電話回調每個循環將停止?我想繼續迭代,即使我得到一個錯誤。我想在停止之前解析每個文件的ip – Pixel

+0

這就是async.each的工作原理。 – Mikuso

+0

如果您想繼續迭代而不終止錯誤,只需調用沒有錯誤的回調。 '回調();' – Mikuso