gpt4 book ai didi

Node.js 返回值未定义

转载 作者:太空宇宙 更新时间:2023-11-04 01:47:16 25 4
gpt4 key购买 nike

下面代码片段中的

token 始终是未定义。有人可以帮我弄清楚这里出了什么问题吗?

[err, token] = await to(comparePassHash(body.password, user.password));`

comparePassHash = async (pass, hash) => {
bcrypt.compare(pass, hash, (err, token) => {
if (err) TE(err);
console.log('test');
return token;
});
};


to = (promise) => {
return promise
.then(data => {
return [null, data];
}).catch(err =>
[pe(err)]
);
};

最佳答案

它是未定义,因为这是comparePassHash 解析的内容。

在这种情况下,

async 关键字将无法按您的预期工作。您将在 .compare 函数内返回 token,而不是在 comparePassHash 内。您必须用 Promise 包装 bcrypt.compare

const comparePassHash = (pass, hash) => {
return new Promise((resolve, reject) => {
bcrypt.compare(pass, hash, (err, token) => {
if (err)
return reject(err);
console.log('test');
return resolve(token);
});
});
};
<小时/>

获取你的函数:

comparePassHash = async (pass, hash) => {
bcrypt.compare(pass, hash, (err, token) => {
if (err) TE(err);
console.log('test');
return token;
});

// implicit return: undefined
};

如果没有 await ,它将执行 bcrypt.compare,它不会等到完成,因为它不是一个 promise ,并且它将退出该函数,返回 undefined 因为您缺少 return 语句。

另一种方法是使用Util.promisify

const { promisify } = require('util');
const comparePassHash= promisify(bcrypt.compare);

// This must be inside an async function
[err, token] = await to(comparePassHash(body.password, user.password));

关于Node.js 返回值未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51002886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com