Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ToUpperCase函数不适用于Wait关键字_Javascript_Node.js - Fatal编程技术网

Javascript ToUpperCase函数不适用于Wait关键字

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子句:

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,如您所述)