簡體   English   中英

回調不是函數-管理異步調用Node js

[英]Callback is not a function -manage asynchronous call 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: 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文件包含在index.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請勿更改args順序以調用回調。 (用callback(null,err); callback(null,res);代替callback(null,err);callback(null,res); callback(err,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);

您需要在函數中傳遞callback函數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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM