从异步函数调用非异步函数时返回不正常

时间:2019-05-27 20:19:37

标签: angular typescript ionic4

我正在尝试进行一次验证,其中每2秒,该应用程序都会在数据库中检查某个值,直到找到所述值为止

let conf = false;
do {
  await this.sleep(2 * 1000);
  conf = this.checkSession(hash);
  console.log(conf);
} while (!conf);    
checkSessao(hash) {
  let sql = "SELECT usuario_id FROM sessao WHERE hash='" + hash + "';";

  this.db.selectGenerico(sql).then(response => {
    if (response[0].usuario_id !== null) {
      console.log("suposed to return true");
      return true;
    }

  }).catch(ex => {
    return false;
  });

  return false;
}

问题是,即使false被触发,函数也总是返回console.log("suposed to return true");。我相信这与我在non-async函数内部调用async函数的事实有关。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您的假设是正确的。您需要在version: '3.2' services: backend: build: backend ports: - 21080:80 volumes: # Re-use local composer cache via host-volume - ~/.composer-docker/cache:/root/.composer/cache:delegated - ./docker/php/php.ini:/usr/local/etc/php/conf.d/custom.ini # Mount source-code for development - ./:/app api: build: api ports: - 22080:80 volumes: # Re-use local composer cache via host-volume - ~/.composer-docker/cache:/root/.composer/cache:delegated - ./docker/php/php.ini:/usr/local/etc/php/conf.d/custom.ini # Mount source-code for development - ./:/app mysql: image: mysql:latest restart: always container_name: mysql-sensei ports: - 3306:3306 command: --default-authentication-plugin=mysql_native_password --innodb_flush_method=O_DIRECT volumes: - ./docker/mysql/dump:/docker-entrypoint-initdb.d - ./docker/mysql/my.cnf:/etc/mysql/my.cnf environment: - MYSQL_ROOT_PASSWORD=secret - MYSQL_DATABASE=secret - MYSQL_USER=secret - MYSQL_PASSWORD=secret 函数中返回一个Promise,然后等待其在循环中解决。

checkSessao

用法:

checkSessao(hash) {
  return new Promise((resolve, reject) => {
    let sql = "SELECT usuario_id FROM sessao WHERE hash='" + hash + "';";    
    this.db.selectGenerico(sql).then(response => {
      if(response[0].usuario_id !== null) {
        console.log("suposed to return true");
        resolve(true);
      } else {
        resolve(false);
      }
    }).catch(ex => {
      resolve(false);
    });
  })
}