Javascript 无法表示节点ftp模块中的方法
我不熟悉node.js和promise风格的函数调用。通过查看中的denodeify示例,我尝试将node.js node ftp模块的方法denodeify如下: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
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()
结尾处,您还缺少一个结束参数。