Javascript ToUpperCase函数不适用于Wait关键字
我试图使用这样一个if子句:Javascript ToUpperCase函数不适用于Wait关键字,javascript,node.js,Javascript,Node.js,我试图使用这样一个if子句: if(await database.getValue("SDA").toUpperCase() == "AP"){ ... 我有一个错误: TypeError:数据库.getValue(…)。toUpperCase不是 作用 但是,当我将上述if条款更改为 let check = await database.getValue("SDA") if(check.toUpperCase() == &qu
if(await database.getValue("SDA").toUpperCase() == "AP"){
...
我有一个错误:
TypeError:数据库.getValue(…)。toUpperCase不是
作用
但是,当我将上述if条款更改为
let check = await database.getValue("SDA")
if(check.toUpperCase() == "AP"){
.....
它很好用
为什么这种情况会发生在Nodejs中?属性访问(
)比等待(17)高(20)。您当前的代码相当于:
if(await (database.getValue("SDA").toUpperCase()) == "AP"){
因为
s在wait
尝试解析右侧的表达式之前被链接在一起-这不起作用,因为getValue
调用返回承诺
您还可以通过将await getValue
调用分组到括号中来修复它:
if((await database.getValue("SDA")).toUpperCase() == "AP"){
或者使用正则表达式绕过=
运算符优先级(请参阅修订历史记录,我不建议使用它,这很奇怪)
就我个人而言,我更喜欢先将其提取到变量中的原始代码,它的可读性更强一些如果((wait database.getValue(“SDA”)).toUpperCase()==“AP”){}
或者像这样重构代码
try {
const value = await database.getValue("SDA")
if(!value) return // what you ned
if (value === 'AP'){
// do thomthing
}
} catch (e) {
// handle with error
}
在您的if
语句中添加paren怎么样if((wait database.getValue(“SDA”)).toUpperCase()=“AP”)
我觉得您对正则表达式的评论为这个答案引入了不必要的元素。我不希望将正则表达式方法视为答案的一部分。相反,如果您只是重新解释为什么提取变量的“它工作得很好”方法确实有效(因为您更喜欢这样)。我承认您间接地表明,将等待的承诺传递给其他函数本质上迫使您将其包含在paren中(或将其分配给var,如您所述)