【问题标题】:NodeJS Async Loop - Doesn't reach final error blockNodeJS 异步循环 - 未到达最终错误块
【发布时间】:2018-01-21 00:03:55
【问题描述】:

我有一段这样的代码:

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

有没有办法强制异步循环在逻辑上完成?

【问题讨论】:

    标签: node.js callback ftp async.js


    【解决方案1】:

    错误在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");
        }
    });
    

    【讨论】:

    • 随时!很高兴为您提供帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多