【发布时间】:2018-04-18 12:57:05
【问题描述】:
我有一个返回 true 或 false 的异步函数。它看起来像以下一个:
class User {
async canManageGroup(group) {
if (typeof group === 'number') {
// group - id
group = await getGroupById(group)
} // else group is already loaded from DB
return this.id === group.manager.id
}
}
如果group参数是组的ID,那么函数将对DB进行异步调用,所以函数canManageGroup将异步执行。但是如果group 参数是组模型,那么函数只会调用return this.id === group.manager.id 或者它会同步执行。以这种方式编写代码是一种好习惯吗?或者我应该将同步代码转换为异步代码?
function makeAsync(cb) {
return new Promise(resolve => setImmediate(() => resolve(cb())))
}
class User {
async canManageGroup(group) {
if (typeof group === 'number') {
// group - id
group = await getGroupById(group)
} // else group is already loaded from DB
return await makeAsync(() => this.id === group.manager.id)
}
}
【问题讨论】:
-
不,不要做第二个......这在
async函数中是多余的 -
可能的解决方案:让
canManageGroup总是期望一个组(从不是组 ID);如果调用者只有一个组ID,那么他们可以调用canManageGroup(await getGroupById(groupId))