Javascript 无法表示节点ftp模块中的方法

Javascript 无法表示节点ftp模块中的方法,javascript,node.js,promise,Javascript,Node.js,Promise,我不熟悉node.js和promise风格的函数调用。通过查看中的denodeify示例,我尝试将node.js node ftp模块的方法denodeify如下: var ftp = require('ftp'); var q = require('q'); var ftpClient = new ftp(); ftpClient.on('ready', function() { var ftpList = q.denodeify(ftpClient.list); ftpLis

我不熟悉node.js和promise风格的函数调用。通过查看中的denodeify示例,我尝试将node.js node ftp模块的方法denodeify如下:

var ftp = require('ftp');
var q = require('q');
var ftpClient = new ftp();
ftpClient.on('ready', function() {
    var ftpList = q.denodeify(ftpClient.list);
    ftpList().then(function(list) {
        console.log(list);
    }.then(null, function(err) {
        console.log(err);
    }).done(function() {
        ftpClient.end();
    });
});
ftpClient.connect();
但是,在使用节点运行该代码时,会显示错误“list error:TypeError:Object”没有方法“_pasv”

我不确定那段代码出了什么问题。有人知道这有什么问题吗?你能告诉我一些调试/排除错误消息原因的方法吗


谢谢。

您需要使用
q.nbind

q.nbind(ftpClient.list, ftpClient);

您需要使用
q.nbind

q.nbind(ftpClient.list, ftpClient);
当你经过的时候

ftpClient.list
Q.denodefiny
,您将从
ftpClient
对象获取函数对象
list
。它将只是一个函数,与父对象的关系将丢失。这很重要,因为绑定函数
list
可能依赖于
ftpClient
对象。所以,您必须确保链接没有断开

引述

请注意,如果有一个方法使用Node.js回调模式, 与函数不同,您需要将其绑定到此值 在将其传递给denodeify之前,如下所示:

var Kitty = mongoose.model("Kitty");
var findKitties = Q.denodeify(Kitty.find.bind(Kitty));
方法的更好策略是使用
Q.nbind
,如下所示

因此,您可以通过两种方式修复代码

  • 使用
    Q.denodeify

    var ftpList = q.denodeify(ftpClient.list.bind(ftpClient));
    
    var ftpList = q.nbind(ftpClient.list, ftpClient);
    
  • 像这样使用

    var ftpList = q.denodeify(ftpClient.list.bind(ftpClient));
    
    var ftpList = q.nbind(ftpClient.list, ftpClient);
    
  • 当你经过的时候

    ftpClient.list
    
    Q.denodefiny
    ,您将从
    ftpClient
    对象获取函数对象
    list
    。它将只是一个函数,与父对象的关系将丢失。这很重要,因为绑定函数
    list
    可能依赖于
    ftpClient
    对象。所以,您必须确保链接没有断开

    引述

    请注意,如果有一个方法使用Node.js回调模式, 与函数不同,您需要将其绑定到此值 在将其传递给denodeify之前,如下所示:

    var Kitty = mongoose.model("Kitty");
    var findKitties = Q.denodeify(Kitty.find.bind(Kitty));
    
    方法的更好策略是使用
    Q.nbind
    ,如下所示

    因此,您可以通过两种方式修复代码

  • 使用
    Q.denodeify

    var ftpList = q.denodeify(ftpClient.list.bind(ftpClient));
    
    var ftpList = q.nbind(ftpClient.list, ftpClient);
    
  • 像这样使用

    var ftpList = q.denodeify(ftpClient.list.bind(ftpClient));
    
    var ftpList = q.nbind(ftpClient.list, ftpClient);
    

  • 在第一个
    .then()
    结尾处,您还缺少一个结束参数。在第一个
    .then()
    结尾处,您还缺少一个结束参数。