2017-08-12 77 views
0

我有這樣一段代碼:的NodeJS異步循環 - 沒有達到最終的誤差塊

var async = require('async'); 
var ftp = require('jsftp'); 

async.waterfall([ 
    function(callback){ 
     console.log("Step 1"); 
     // fetch data from DB 
     callback(null); 
    }, 
    function(callback){ 
     console.log("Step 2"); 
     // FTP to remote location using a third party library 
     ftp.put(fileName, remoteLocation, function(err) { 
     if (!err){ 
      callback(null, "File transferred successfully!") 
     }else { 
      callback(err, null) 
     } 
    }); 
}], 
function(err, result){ 
    if(err){ 
     console.log("Step 2.5") 
     console.log(err); 
    }else{ 
     console.log("Step 3"); 
    } 
    callback(err, result); 
}); 

嗯,我所期望的是,如果有文件的FTP任何錯誤(比方說,FTP服務器關閉)循環應該到「步驟2.5」。

相反,它只是拋出一個錯誤(ECONNRESET如果服務器關閉),它永遠不會到它發送回調的最後一個塊。

有什麼辦法強制異步循環完成邏輯?

回答

1

該錯誤正在發射深net.js模塊Node - 必須看jsftp的實施。您需要在FTP對象的error event上提供event listener,並在那裏處理它。

這是你的代碼的修改版本:

async.waterfall([ 
    function(callback) { 
     console.log("Step 1"); 
     // fetch data from DB 
     callback(null); 
    }, 
    function(callback) { 
     console.log("Step 2"); 
     // FTP to remote location using a third party library 

     ftp.on('error', function(error) { 
      callback(error); 
     }); 

     ftp.put(__dirname + '/data/myFile', '', function(err) { 
      if (!err){ 
       callback(null, "File transferred successfully!") 
      }else { 
       callback(err, null) 
      } 
     }); 
}], 
function(err, result){ 
    if(err){ 
     console.log("Step 2.5") 
     console.log(err); 
    }else{ 
     console.log("Step 3"); 
    } 
}); 
+0

非常感謝! – swateek

+0

隨時!樂意效勞! – mscheker