即使满足条件,异步函数中的 NodeJS IF 语句也不会执行

时间:2021-01-21 15:31:34

标签: node.js async-await socket.io

我有一个用 NodeJs 编写的套接字 io 应用程序。它具有发射超时功能,我的套接字服务器应用程序将从客户端接收该功能,并将检查我的猫鼬数据库中的某些数据。我有一个 IF 语句,用于检查返回的数据是否为真并执行一些代码。

exports.timeout = async (ref, clientdata) => {

 try {
    let resp = await Gc.find({'ref': ref});

    for (const ele of resp) {
      let mongodata = ele.data;
         
         if (mongodata === clientdata) {
             do-something;
         }
     }
  } catch (err) {
    console.log(err)
  }
}

一个或多个客户端通过socket io调用超时函数。

客户端第一次调用超时函数时,即使满足if条件,也不会执行IF块中的代码。

奇怪的是,第二个调用超时函数的客户端会在满足if条件时执行IF块中的代码。它适用于第三个、第四个和后续客户端。

我有一些用例,当只有 1 个客户端发送超时事件并且由于未执行 IF 条件时程序无法继续。

知道它为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

好的,我找到了部分答案。

IF 条件失败,因为我使用了“===”严格相等运算符。由于未知原因,与后续执行相比,Mongoose Find 查询的响应在第一次执行时返回了不同的变量类型。

我正在使用“==”运算符,它可以进行类型更正并且 IF 条件完全匹配。