繁体   English   中英

Node.js返回值未定义

[英]Node.js return value is undefined

以下代码段中的token始终undefined 有人可以帮我弄清楚这里出什么问题吗?

[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)]
    );
};

它是undefined因为这是comparePassHash解决的。

在这种情况下, async关键字将无法正常运行。 您将在.compare函数内而不是comparePassHash内部返回token 您必须用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 ,直到它完成后才会等待,因为这不是一个承诺,并且它将退出该函数,由于缺少return语句而返回undefined

另一种方法是使用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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM