我正在尝试为数组中的每个用户加密密码。
router.post("/insertuser", (req, res) => {
var promises = users.map((item) => {
bcrypt.genSalt(10)
.then((salt) => {
return item
})
})
Promise.all(promises)
.then((results) => {
console.log(results)
res.json({
"data": results
})
})
})//end route
但我得到的结果= [未定义,未定义]。
如何从 bcrypt.genSalt(10)返回数组元素。然后
请帮助我,因为我是ES6的新手
编辑:我的用户用户数组是这样的:
[{" username":" admin"," admin":true} ]
答案 0 :(得分:1)
只需从bcrypt.genSalt
返回承诺。
router.post("/insertuser", (req, res) => {
var promises = users.map((item) => {
return bcrypt.genSalt(10)
.then((salt) => {
return item
})
})
Promise.all(promises)
.then((results) => {
console.log(results)
res.json({
"data": results
})
})
})//end route
答案 1 :(得分:0)
在任何承诺之后添加.then()
时,它将直接得到解决。在您的代码中,users.map()
将同步运行,并且promises将是未定义的。
以下是您可以使用的代码:
router.post("/insertuser", (req, res) => {
var promises = users.map((item) => {
return bcrypt.genSalt(10);
})
Promise.all(promises)
.then((results) => {
console.log(results)
});
})//
还要注意salt用于生成哈希。你只生盐。要生成密码哈希,还要添加bcrypt.hash(password,salt)
。这是代码:
var promises = users.map((item) => {
return bcrypt.genSalt(10);
})
Promise.all(promises)
.then((results) => {
promises = results.map((item, index) => {
return bcrypt.hash(users[index], item);
});
return Promise.all(promises);
})
.then(result => {
console.log(result);
})
.catch(err => {
console.log(err);
});