无法读取未定义的属性“ catch”

时间:2019-04-13 21:13:55

标签: node.js promise

我试图在Node中使用Argon2加密,但是当我尝试加密字符串时,出现此错误:

Cannot read property 'catch' of undefined

我尝试处理argon2.hash函数返回的诺言中的错误,但是仍然无法正常工作。

到目前为止,这是我的代码:

argon2.hash('password', {type: argon2.argon2id})
    .then(hash => {
        // do something with the hash
    }).catch(err => {
        // Handle the error
    });

有人可以帮助我解决此错误吗?

3 个答案:

答案 0 :(得分:1)

它抛出异常,不返回承诺。因此,没有可以在其上调用then(...)。catch(...)方法的promise对象。

要捕获它,您需要一个实际的try / catch块

argon2 github page开始,您应该这样做:

const argon2 = require('argon2');

try {
  const hash = await argon2.hash("password");
} catch (err) {
  //...
}

答案 1 :(得分:1)

在我的情况下,我收到了该错误消息,因为我

a)窥探某种异步方法

spyOn(sut,'myAsyncMethod')

b)之后将.catch()附加到原始方法调用中,却忘记了扩展间谍以返回值/承诺。

退还间谍的诺言解决了我的问题:

spyOn(sut,'myAsyncMethod').and.returnValue(new Promise(resolve=>resolve()));

答案 2 :(得分:0)

请尝试以下操作:

argon2.hash('password', {type: argon2.argon2id})
  .then(hash => {
    // do something with the hash
}, err => {
    // Handle the error
});

then子句的第二个参数是onError处理程序。