【发布时间】:2021-04-02 23:58:39
【问题描述】:
我有一个带有“用户”的对象数组,每个对象都有一个用户名、名称和密码属性。我想对每个用户的密码进行哈希处理,创建一个具有相同属性但省略哈希密码的用户对象,然后在保存之前使用 map() 返回它,然后使用 Promise.all() 完成它
const initialUsersArray = [
{
username: 'user1',
name: 'User McUser',
password: 'abcd'
},
{
username: 'user2',
name: 'User Usersson',
password: '1234'
},
const SALT_WORK_FACTOR = 10;
const hashedUsers= initialUsersArray.map(async (user) => {
const hashedPassword = await bcrypt.hash(user.password, SALT_WORK_FACTOR);
return new User({
username: user.username,
name: user.name,
hashedPassword
});
});
const promiseArray = hashedUsers.map(user => user.save());
await Promise.all(promiseArray);
问题是在尝试 save() 每个用户之前它不会等待承诺解决。
如果我 console.log hashedUsers 我得到一个数组 Promise { <pending> },
我遗漏了一些关于 Promises 在 map() 中如何工作的内容, 如果我只将它用于单个用户,上面的工作就很好,就像这样
const hashedPassword = await bcrypt.hash(password, SALT_WORK_FACTOR);
const user = new User({
username: username,
name: name,
hashedPassword,
});
await user.save()
【问题讨论】:
-
我发布了一个新答案,希望能解决您的问题。如果没有,请告诉我。