0
const _sodium = require('libsodium-wrappers');
(async (model = this._modelUser) => { //Had to pass this._modelUser otherwise it'd be undefined
    await _sodium.ready;
    const sodium = _sodium;

    let password = sodium.crypto_pwhash_str(Utils.urldecode(data.password), 7, 677445);
    model.password = password;
    console.log('In:' + model.password); //Good value
})();

console.log('Out:' + this._modelUser.password); //Undefined

所以在这种情况下,this._modelUser.password是未定义的外部函数。在继续之前,我想等待this._modelUser获得正确的密码值。

有谁知道如何解决这个问题?谢谢你的帮助

不同于如何从异步调用返回响应?由于语法(async => ())和特定模块的使用:https ://www.npmjs.com/package/libsodium

4

2 回答 2

0

所以async/await的目的是不阻塞并返回一个Promise对象,您可以使用该对象对返回的内容采取行动。

分配密码后,很难确切知道您打算对模型做什么,但我建议您在当前功能之外将密码分配给模型,如下所示:

const _sodium = require('libsodium-wrappers');

const generatePassword = async () => {
    await _sodium.ready;
    const sodium = _sodium;

    // Not sure where you have got data from, could be passed in locally.
    return sodium.crypto_pwhash_str(Utils.urldecode(data.password), 7, 677445);
}

generatePassword()
    .then((password) => {
        this._modelUser.password = password;
    })
    .catch((error) => console.log('error: ', error))

当然,您可以将其进一步拆分以使其更具功能性。

于 2019-01-22T10:47:38.707 回答
0

Promise 有助于实现这一目标。



const _sodium = require('libsodium-wrappers');
(async (model = this._modelUser) => { d
    await _sodium.ready;
    const sodium = _sodium;

    let password = sodium.crypto_pwhash_str(Utils.urldecode(data.password), 7, 677445);
    model.password = password;

    return new Promise((resolve, reject) => {
    if(model.password) resolve(model.password); 
    else reject(model)
   })
})()
.then((a) =>{
//handling code
})
.catch((a) => {
//handling code
})
于 2019-01-22T10:55:39.013 回答