我有4个等待呼叫,需要连续拨打。我目前所拥有的一切都很好,但对我来说看起来像是不好的代码。有没有更好的方法来写这个?我尝试过使用诺言链,但是看起来比预期的要糟糕。
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
}
答案 0 :(得分:1)
一种使用最少的代码运行多个异步调用的方法是通过异步for循环:
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)
}
})
/* Merge sequence of model counts into an asynchronous for-loop */
for(const model of [Admin, Teacher, Student, Scheduler]) {
/*
Evaluate async count() function per loop iteration. This will cause
count() on each model to be called and completed sequentailly, one-
after-the-next during iteration of the array. Note also that the
callback is not needed */
const count = await model.countDocuments({
username: {
$regex: new RegExp(generatedUsername)
}
});
console.log(`${model.name} ran`);
Count(count);
}
if (countTracker === 0) {
generatedUsername = `${firstName}.${lastName}`.toLowerCase()
} else {
generatedUsername = `${firstName}.${lastName}.${countTracker}`.toLowerCase()
}
console.log(countTracker)
return generatedUsername
}