toUpperCaseFunction不适用于await关键字
我试图使用这样的 if 子句:
if(await database.getValue("SDA").toUpperCase() == "AP"){
...
我有一个错误:
类型错误:database.getValue(...).toUpperCase 不是函数
但是,当我将上述 if 子句更改为
let check = await database.getValue("SDA")
if(check.toUpperCase() == "AP"){
.....
它工作正常。
为什么在 Nodejs 中会发生这种情况?
回答
属性访问 ( .) 具有比(17)更高的运算符优先级(20 await)。您当前的代码相当于:
if(await (database.getValue("SDA").toUpperCase()) == "AP"){
因为在尝试解析右侧的表达式.之前 s 被链接在一起await- 这不起作用,因为getValue调用返回了 Promise。
您还可以通过将await getValue调用分组在括号中来修复它:
if((await database.getValue("SDA")).toUpperCase() == "AP"){
或者通过使用正则表达式来绕过==运算符优先级(请参阅修订历史,我不推荐它,这很奇怪)。
就个人而言,我更喜欢您将其提取到变量中的原始代码,它更具可读性