Nic*_*ick 2 node.js sequelize.js visual-studio-code
在控制器方法内部,我有下面的代码块。Visual Studio Code 给出错误:
无法重新声明块范围变量“count”和“rows”
但我不明白这一点,因为这些变量是在不同的情况下声明的,并且只有 1 个情况会触发。我应该如何处理这个问题?
switch (tab) {
case "active":
const { count, rows } = await User.findAndCountAll({
where: {
...query,
},
offset,
limit,
});
break;
case "favourites":
const { count, rows } = await User.findAndCountAll({
where: {
...query,
[Op.or]: [{ name: {[Op.like]: `%${searchText}%` }}],
},
offset,
limit,
});
...
Run Code Online (Sandbox Code Playgroud)
默认情况下,switch 语句没有不同的作用域,事实上,如果您不在breaka 末尾使用关键字,case脚本将执行所有情况下的所有代码,直到找到中断或switch语句结束。
例如:
switch(1) {
case 1:
console.log('case 1');
case 2:
console.log('case 2');
}
// OUTPUT:
// case 1
// case 2
Run Code Online (Sandbox Code Playgroud)
在这种情况下,所有案例都被执行,因为我没有使用任何break.
交换机的唯一范围是交换机本身,那么如何才能实现您的目标呢?
您可以通过将案例括在括号内来完成此操作,因此它将变为:
switch(1) {
case 1: {
const n = 1
console.log('case ' + n)
break
}
case 2: {
const n = 2
console.log('case ' + n)
break
}
}
// That's valid
Run Code Online (Sandbox Code Playgroud)
如果您不想复制代码只是为了编辑查询,您可能会执行以下操作:
const query = { /* whatever */ }
const { count, rows } = await User.findAndCountAll({
where: tab === 'active' ? {
...query,
} : {
...query,
[Op.or]: [{ name: {[Op.like]: `%${searchText}%` }}]
},
offset,
limit,
})
Run Code Online (Sandbox Code Playgroud)
通过使用三元运算符,您甚至不必实现开关并复制代码,您只需根据变量更改查询部分
| 归档时间: |
|
| 查看次数: |
2356 次 |
| 最近记录: |