我正在使用node-ftp库,我希望提供某些方法(list()
和get()
)。
[我知道有基于诺言的包装器,但是我需要返回可读流(而不是写入本地文件),并且node-ftp允许这样做。
get()
方法似乎遵循正确的模式进行承诺,但我无法使其正常工作:
list([ path,] [ useCompression,] 回调)
未承诺的代码正常工作
// THIS WORKS
var Client = require('ftp');
var c = new Client();
c.on('ready', function () {
c.list('/mypath', function (err, data) {
console.log(data)
})
});
c.connect()
..承诺的代码不:
// THIS DOES NOT WORK
var Client = require('ftp');
var { promisify } = require('util');
var c = new Client();
var ftp_list = promisify(c.list)
c.on('ready', function () {
ftp_list('/mypath')
.then(data => {
console.log(data)
})
.catch((err) => {
console.log('Error', err);
});
});
c.connect()
返回错误:TypeError: this._pasv is not a function
错误中this.
的出现使我认为这是箭头功能问题,但是使用常规功能也不起作用。
此节点FTP功能(以及c.get()
同样)可以这样实现吗?还是我错过了什么?
[将c.list
传递给promisify
时,您希望它保留 c
的调用上下文(以便this
的实现所使用的.list
具有_pasv
属性),因此请使用.bind
:
var ftp_list = promisify(c.list.bind(c))