无法承诺 node-ftp 函数
Can't Promisify node-ftp Function
我正在使用 node-ftp 库,我想承诺某些方法(list()
和 get()
)。
我知道有基于 promise 的包装器,但我需要 return 可读流(而不是写入本地文件)并且 node-ftp 允许这样做。
get()
方法似乎遵循正确的 promisification 模式,但我无法让它工作:
list([path, ][useCompression, ]callback)
非承诺代码按预期工作
// 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()
returns 错误:TypeError: this._pasv is not a function
错误中 this.
的存在让我认为这是一个箭头函数问题,但使用普通函数也不起作用。
这个 node-ftp 函数(以及同样的 c.get()
)可以这样被承诺吗?还是我遗漏了什么?
当您将 c.list
传递给 promisify
时,您希望它 保持 c
的调用上下文(以便 [= .list
的实现使用的 14=] 有 _pasv
属性), 所以使用 .bind
:
var ftp_list = promisify(c.list.bind(c))
我正在使用 node-ftp 库,我想承诺某些方法(list()
和 get()
)。
我知道有基于 promise 的包装器,但我需要 return 可读流(而不是写入本地文件)并且 node-ftp 允许这样做。
get()
方法似乎遵循正确的 promisification 模式,但我无法让它工作:
list([
非承诺代码按预期工作
// 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()
returns 错误:TypeError: this._pasv is not a function
错误中 this.
的存在让我认为这是一个箭头函数问题,但使用普通函数也不起作用。
这个 node-ftp 函数(以及同样的 c.get()
)可以这样被承诺吗?还是我遗漏了什么?
当您将 c.list
传递给 promisify
时,您希望它 保持 c
的调用上下文(以便 [= .list
的实现使用的 14=] 有 _pasv
属性), 所以使用 .bind
:
var ftp_list = promisify(c.list.bind(c))