Javascript 回调不是函数管理异步调用节点js

Javascript 回调不是函数管理异步调用节点js,javascript,node.js,Javascript,Node.js,我正在使用下面的代码从ftp读取文件 var JSFtp = require("jsftp"); var config = require('./config.json'); var FtpService = function () {}; // Connect to FTP var Ftp = new JSFtp({ host: config.ftp.host, port: config.ftp.port, user: config.ftp.user, pass: conf

我正在使用下面的代码从ftp读取文件

var JSFtp = require("jsftp");
var config = require('./config.json');
var FtpService = function () {};
// Connect to FTP
 var Ftp = new JSFtp({
  host: config.ftp.host,
  port: config.ftp.port,
  user: config.ftp.user, 
  pass: config.ftp.pass
});

FtpService.prototype.getFTPDirectoryFiles = function (callback) {
    Ftp.list(config.ftp.FilePath, function(err, res) {
        if(err){
          console.log('File Listing Failed', err);
          callback(null,err);
          return;
        }
        else{
            console.log(res);
            callback(null,res);
        }
    });
};


FtpService.prototype.closeFtp = function () {
  console.log('Disconnect to FTP');
};



module.exports = new FtpService();
现在,我将这个ftp服务js文件作为

var ftp = require('./ftpservice.js');
ftpfiles = ftp.getFTPDirectoryFiles();
console.log(ftpfiles);
getFTPDirectoryFiles返回文件列表。但是如果我通过index.js调用它,我会得到未定义的ftpfiles。这是因为节点js的异步特性。 所以我想添加回调,但是 我得到的错误回调未在函数FtpService.prototype.getFTPDirectoryFiles中定义,在此行:

ftpfiles = ftp.getFTPDirectoryFiles()
您没有传递该函数所需的回调,而是试图使用该函数不返回的返回值

您需要这样做:

var ftp = require('./ftpservice.js');
ftp.getFTPDirectoryFiles(function(err, ftpfiles) {
    if (err) {
        console.log(err);
    } else {
        console.log(ftpfiles); 
    }
});

1不要更改参数顺序以调用回调。替换callbacknull,错误;和callbacknull,res;由callbackerr,res

2您需要定义一个特定的回调函数,然后将其交给ftp.getFTPDirectoryFiles

var JSFtp = require("jsftp");
var config = require('./config.json');
var FtpService = function () {};
// Connect to FTP
 var Ftp = new JSFtp({
  host: config.ftp.host,
  port: config.ftp.port,
  user: config.ftp.user, 
  pass: config.ftp.pass
});

FtpService.prototype.getFTPDirectoryFiles = function (callback) {
    Ftp.list(config.ftp.FilePath, function(err, res) {
        if(err){
          console.log('File Listing Failed', err);
          callback(err, res);
          return;
        }
        else{
            console.log(res);
            callback(err, res);
        }
    });
};

FtpService.prototype.getFTPDirectoryFilesSimplify = function (callback) {
    // no console.log, but very more simple !
    Ftp.list(config.ftp.FilePath, callback);
};


FtpService.prototype.closeFtp = function () {
  console.log('Disconnect to FTP');
};
然后:

var ftp = require('./ftpservice.js');
ftpfiles = ftp.getFTPDirectoryFiles(function(err,res){
    // do your specifc job here using err and res
});
console.log(ftpfiles);
您需要在函数getFTPDirectoryFiles中传递callbackfunction


您在哪里调用函数FtpService.prototype.getFTPDirectoryFiles
var ftp = require('./ftpservice.js');
var ftpFiles;
function setFtpFiles(err, res) {
  if (err) throw err;
  ftpFiles = res; // to use "ftpFiles" variable later
  console.log(res);
}

ftp.getFTPDirectoryFiles(setFtpFiles);