Javascript 将变量定义为let和var
我使用的变量如下:Javascript 将变量定义为let和var,javascript,node.js,let,Javascript,Node.js,Let,我使用的变量如下: var maxId=1; schema.table.max('id').then(function(max) { maxId=max+1; }).catch(err => { maxId=1; }); 从数据库中获取最大id并添加一个 console.log(maxId) //prints the maximum id. 我还想通过以下方式为新数据添加新id: schema.tab
var maxId=1;
schema.table.max('id').then(function(max) {
maxId=max+1;
}).catch(err => {
maxId=1;
});
从数据库中获取最大id并添加一个
console.log(maxId) //prints the maximum id.
我还想通过以下方式为新数据添加新id:
schema.table.findAll({where: option}).then((existed) => {
for (let insert of insertionList) {
insert['id'] = maxId;
maxId=maxId+1;
}
})
这里insertionList的id属性显示为NaN而不是max
我使用了let和var,但都产生了NaN。感谢您的帮助
undefined + 1
=> NaN
我认为,当数据库为空时,它不会通过catch语句,因为尝试获取最大值时没有出现错误(即使它是未定义的)
您应该处理max未定义的情况
以下是我用ES6编写的解决方案:
let maxId = 1;
schema.table.max('id')
.then(max => maxId = (max || 0) + 1)
我认为,当数据库为空时,它不会通过catch语句,因为尝试获取最大值时没有出现错误(即使它是未定义的)
您应该处理max未定义的情况
以下是我用ES6编写的解决方案:
let maxId = 1;
schema.table.max('id')
.then(max => maxId = (max || 0) + 1)
这是一个一般性的答案,不仅仅是基于你写的。 它将帮助您调试问题并编写更简洁的代码。 在某个地方声明一个变量并在承诺范围内更改它是一种非常糟糕的做法,您可能会创建一些不可预测的东西,并且它可能基于种族条件。 在读取变量时,可以很容易地对其进行未定义或其他操作。这都是基于时间的 比如:
var maxId=1;
schema.table.max('id')。然后(函数(max){
maxId=max+1;
}).catch(错误=>{
maxId=1;
});
可以很容易地翻译为:
const maxId=wait schema.table.max('id'))
。然后(最大=>{
//这里是对max的一些检查(它可以是null还是未定义?)
返回最大值+1;
}, () => 1);
为了避免副作用,尽量使用“const”而不是“let”和“var”。如果您在大多数情况下被迫使用let或var,则意味着您做得不对,尤其是在使用承诺或异步代码时
一个重要的考虑因素……
<>你所写的意味着一个错误会考虑max=1。抛出错误(或拒绝承诺)应该以适当的方式处理(不像你的例子,甚至不像我的例子…)。如果出现I/O问题或缺乏许可,您使用的库可能会拒绝您的承诺。这些案例不应意味着max=1,但应报告这些案例,以便采取其他行动。这是一个通用答案,而不仅仅是基于您所写的内容。 它将帮助您调试问题并编写更简洁的代码。 在某个地方声明一个变量并在承诺范围内更改它是一种非常糟糕的做法,您可能会创建一些不可预测的东西,并且它可能基于种族条件。 在读取变量时,可以很容易地对其进行未定义或其他操作。这都是基于时间的 比如:
var maxId=1;
schema.table.max('id')。然后(函数(max){
maxId=max+1;
}).catch(错误=>{
maxId=1;
});
可以很容易地翻译为:
const maxId=wait schema.table.max('id'))
。然后(最大=>{
//这里是对max的一些检查(它可以是null还是未定义?)
返回最大值+1;
}, () => 1);
为了避免副作用,尽量使用“const”而不是“let”和“var”。如果您在大多数情况下被迫使用let或var,则意味着您做得不对,尤其是在使用承诺或异步代码时
一个重要的考虑因素……
<>你所写的意味着一个错误会考虑max=1。抛出错误(或拒绝承诺)应该以适当的方式处理(不像你的例子,甚至不像我的例子…)。如果出现I/O问题或缺乏许可,您使用的库可能会拒绝您的承诺。这些案例不应意味着max=1,但应报告这些案例以采取额外措施。我认为
让或var
与此无关。问题似乎是maxId=max+1代码>什么是max
?这附近没有申报。编辑:对不起,我是盲人编辑2:不过,max
是什么?你确定这是一个数字吗?你能告诉我们max
值是什么吗?可能是schema.table的回调中的max
。max('id')
不是一个数字-你能验证一下吗?max是从db查询中得到的最大id你确定max是一个数字吗?如果你做一个console.log(max)
你会得到一个numbre,而不是一个格式化为字符串或未定义的数字或其他什么?我认为让或var
在这里没有任何关联。问题似乎是maxId=max+1代码>什么是max
?这附近没有申报。编辑:对不起,我是盲人编辑2:不过,max
是什么?你确定这是一个数字吗?你能告诉我们max
值是什么吗?可能是schema.table的回调中的max
。max('id')
不是一个数字-你能验证一下吗?max是从db查询中得到的最大id你确定max是一个数字吗?如果你使用console.log(max)
你会得到一个numbre,而不是一个格式化为字符串或未定义的数字或其他什么?如果你只需要一个默认值,那么((max=0)=>/*…*/)
应该可以工作。如果你只需要一个默认值,那么((max=0)=>/*…*/)应该可以工作。