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),并且它永远不会到达发送回调的最后一个块。
有什么方法可以强制异步循环按逻辑完成吗?
错误在 Node
的 net.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");
}
});
我有一段代码是这样的:
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
的 net.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");
}
});