Javascript:如何在回调中设置父对象变量

标签 javascript node.js asynchronous callback mongoose

我在我的 mongoosejs ODM 模式中定义了一个自定义方法,它允许我生成盐并对给定的密码进行编码。

因为 node.js 加密模块是异步的,所以我必须将密码编码放入盐回调中(否则根本就没有盐,因为生成需要时间)。 但这不是主要问题。主要问题是我需要设置 mongoosejs 对象的盐和密码属性。通常您使用“this”来执行此操作,但“this”在回调中不起作用(它指的是回调而不是父对象)。

那么,我怎样才能从异步调用中取回我的编码密码和盐?

methods: {
    setPassword: function(password) {
        crypto.randomBytes(32, function(err, buf) {
            var salt = buf.toString('hex');
            this.salt = salt;
            crypto.pbkdf2(password, salt, 25000, 512, function(err, encodedPassword) {
                if (err) throw err;
                this.password = encodedPassword;
            });
        });
    }
}

我也试过使用 return 语句,但它们没有返回任何东西......

最佳答案

您可以在回调外部将变量设置为 this 并在内部使用它:

methods: {
    setPassword: function(password) {
        crypto.randomBytes(32, function(err, buf) {
            var self = this;
            var salt = buf.toString('hex');
            this.salt = salt;
            crypto.pbkdf2(password, salt, 25000, 512, function(err, encodedPassword) {
                if (err) throw err;
                self.password = encodedPassword;
            });
        });
    }
}

或者您可以绑定(bind)回调函数,以便保留 this 的值:

methods: {
    setPassword: function(password) {
        crypto.randomBytes(32, function(err, buf) {
            var salt = buf.toString('hex');
            this.salt = salt;
            crypto.pbkdf2(password, salt, 25000, 512, function(err, encodedPassword) {
                if (err) throw err;
                this.password = encodedPassword;
            }.bind(this));
        });
    }
}

关于Javascript:如何在回调中设置父对象变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11555125/

相关文章:

javascript - 使用 bcrypt-nodejs 时出现“没有给出回调函数”错误

c# - 如何循环遍历表格行以切换显示样式?

javascript - 将数据属性添加到 a 标记并使用 JQuery 检索它

Node.js:从 jpeg 图像到视频文件的实时转换

html - 如何在nodejs中下载托管在http网络服务器上的文件

asynchronous - 关于openai基线A2C实现的问题

javascript - 如何使用 JavaScript 为动态文本制作动画?

javascript - 在 Promise 中处理错误的正确方法

node.js - 当前写入文件时如何处理 readFile

c# - 选择不在 ASP.NET Core Web API Controller 中等待异步函数运行