簡體   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