作者:xinzhugedonny | 来源:互联网 | 2023-10-10 23:42
我试图使用这样的if子句:if(awaitdatabase.getValue(SDA).toUpperCase()==AP){..
我试图使用这样的 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"){
或者通过使用正则表达式来绕过==
运算符优先级(请参阅修订历史,我不推荐它,这很奇怪)。
就个人而言,我更喜欢您将其提取到变量中的原始代码,它更具可读性