【发布时间】:2020-06-28 17:23:34
【问题描述】:
如您所见。我正在尝试获取列中的先前密码并使用散列版本对其进行更新。由于某种原因,文档上的保存不会立即触发。所以我尝试使用异步等待,甚至创建自定义异步等待 foreach 来等待回调和保存。然而,Mongoose 似乎在等待所有的保存都进入后才应用保存。
这是我得到的错误。
UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。 (拒绝编号:505) (节点:2440)
const User = require("./models/User");
const bcrypt = require("bcryptjs");
const db = require("./config/keys").mongoURI;
async function hashIt(user) {
console.log(user);
bcrypt.genSalt(10, (err, salt) => {
if (err) console.log(err);
bcrypt.hash(user.Password, salt, async (err, hash) => {
if (err) throw err;
user.Password = hash;
const id = await user.save();
console.log(id);
})
});
}
async function asyncForEach(array, callback) {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
}
async function mySeed() {
try {
User.find({}, async (err, users) => {
if (err) console.log(err);
asyncForEach(users, async (user) => {
await hashIt(user);
})
});
} catch (e) {
console.log(e);
}
}
async function fullThing(){
mongoose.connect(db, { useNewUrlParser: true })
.then(async () => {
await mySeed();
console.log("finished successfully");
})
}
fullThing();```
【问题讨论】:
-
我已经测试了我的解决方案,它有效!
标签: javascript asynchronous mongoose async-await