NodeJS 异步循环 - 未到达最终错误块

NodeJS Async Loop - Doesn't reach final error block

我有一段代码是这样的:

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),并且它永远不会到达发送回调的最后一个块。

有什么方法可以强制异步循环按逻辑完成吗?

错误在 Nodenet.js 模块深处发出 - 必须查看 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");
    }
});