【发布时间】:2019-12-17 20:32:17
【问题描述】:
我需要连续调用 4 个等待调用。我目前拥有的工作正常,但对我来说它看起来像是糟糕的代码。有没有更好的方法来写这个?我尝试使用 Promise-chaining,但它看起来比预期的更糟。
adminSchema.statics.generateUsername = async(firstName, lastName) => {
let generatedUsername = `${firstName}.${lastName}`.toLowerCase()
let countTracker = 0
const Count = ((count) => {
if (count >= 1) {
count++
countTracker += count
console.log("counted")
console.log(countTracker)
}
})
await Admin.countDocuments({ username: { $regex: new RegExp(generatedUsername) } }, (err, count) => {
console.log("admin ran")
Count(count)
})
await Teacher.countDocuments({ username: { $regex: new RegExp(generatedUsername) } }, (err, count) => {
console.log("teacher ran")
Count(count)
})
await Student.countDocuments({ username: { $regex: new RegExp(generatedUsername) } }, (err, count) => {
console.log("student ran")
Count(count)
})
await Scheduler.countDocuments({ username: { $regex: new RegExp(generatedUsername) } }, (err, count) => {
console.log("scheduler ran")
Count(count)
})
if (countTracker === 0) {
generatedUsername = `${firstName}.${lastName}`.toLowerCase()
} else {
generatedUsername = `${firstName}.${lastName}.${countTracker}`.toLowerCase()
}
console.log(countTracker)
return generatedUsername
}
【问题讨论】:
-
countDocuments真的返回一个 Promise并接受回调吗? -
您可以从
[Admin, Teacher, Student, Scheduler]开始,将其映射到Promise 数组,然后使用Promise.all。这样就没有重复的代码了。 -
好奇:如果你使用
callbacks,为什么你有await? -
@ambianBeing 那段代码已经很老了,虽然我还在大量学习新的语法和 MEVN,所以我犯了一些错误。直到你现在才真正注意到它,所以谢谢你:P
标签: javascript mongodb mongoose async-await