无法传播节点ftp功能

问题描述 投票:0回答:1

我正在使用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()同样)可以这样实现吗?还是我错过了什么?

node.js async-await ftp node-promisify
1个回答
0
投票

[将c.list传递给promisify时,您希望它保留 c的调用上下文(以便this的实现所使用的.list具有_pasv属性),因此请使用.bind

var ftp_list = promisify(c.list.bind(c))
© www.soinside.com 2019 - 2024. All rights reserved.