【问题标题】:If statement considers FALSE promise as TRUE如果语句将 FALSE 承诺视为 TRUE
【发布时间】:2022-01-14 15:39:01
【问题描述】:

我正在我的应用中进行身份验证。 并且有这样的代码

  const ttt = currentUser.changedPasswordAfter(decoded.iat);
  console.log(ttt);
  if (ttt) {
    console.log('if thinks ttt is true');

changedPasswordAfter retuns promise (true or false) 所以我运行请求并将其输入控制台。

Promise { false }
if thinks ttt is true

如您所见 ttt 是 FALSE 但 IF 语句决定它是 TRUE 。 我该如何解决?

【问题讨论】:

  • 不是true,而是truthy
  • 请看一下链接。承诺是真实的currentUser.changedPasswordAfter 是什么?
  • 一个promise是一个对象,一个对象被转换为true。如果您想要您的价值,您需要await 或致电thenttt.then(res => /* here res is true or false*/)
  • a Promise 是一个包含数据的对象,这是在 if/else 表达式或类似事物中使某事物为真/评估为真的一种可能方式
  • 只是在样板文件中添加一些内容,请不要将变量命名为 ttt。从不。

标签: javascript node.js promise


【解决方案1】:

Promise 是一个对象 - 所以,它是“真实的”。只有 promise 的解析值可以是真或假。为了给 promise 一个解决的机会,应该使用 awaitPromise.then 方法。

const ttt = currentUser.changedPasswordAfter(decoded.iat);
ttt.then((result) => {
   if (result)
     console.log('Promise returned true')
   else
     console.log('Promise returned false')
}) 

【讨论】:

  • 或者使用这个基于 promise.then 的方法。
  • 查理感谢您的解决方案,但 Rafaa 是第一个。两者都正确将接受 AWAIT 之一。非常感谢:)
  • 没问题。我的目的是提供帮助。请接受拉拉的回答。
  • 再次感谢您:) 两种解决方案都很棒:)
【解决方案2】:

因为 ttt(这是一个非常糟糕的变量名称)是 Promise 而不是布尔值,所以 if 语句返回 True,因为变量 ttt 具有引用(不是未定义或 null)。 尝试添加await 关键字。它会工作,但你必须使函数异步

const ttt = await currentUser.changedPasswordAfter(decoded.iat);
  console.log(ttt);
  if (ttt) {
    console.log('if thinks ttt is true');

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2017-02-28
    • 1970-01-01
    • 2013-11-10
    相关资源
    最近更新 更多