在Promise.promisify之后无法读取undefined的属性

时间:2016-07-25 20:59:20

标签: javascript node.js promise bluebird

let nasPath = "";
return getFamInfo(args.familyID)
    .then(function (famInfo) {
        nasPath = //some code involving famInfo here
        return getSFTPConnection(config.nasSettings);
    }).then(function (sftp) {
      const fastPutProm = Promise.promisify(sftp.fastPut);
      return fastPutProm(config.jpgDirectory, nasPath, {});
    });

如果我在const fastPutProm = Promise.promisify(sftp.fastPut);之后放置一个断点,fastPutProm是一个带有三个参数的函数。但是当我尝试运行此代码时,出现TypeError: Cannot read property 'fastPut' of undefined错误。我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

该错误表示您的sftp值为undefined,因此当您尝试将sftp.fastPut传递给promisify()方法时,会因为您的原因而生成错误试图引用undefined.fastPut TypeError。{/ p>

因此,解决方案是备份几个步骤,找出sftp为什么没有所需值的原因。

另一种可能性是错误来自模块内部,因为sftp.fastPut的实现引用了this,它预期为sftp。你的宣传方法并没有保留this的价值。您可以通过将代码更改为:

来解决此问题
const fastPutProm = Promise.promisify(sftp.fastPut, {context: sftp});