我正在尝试进行一次验证,其中每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
函数的事实有关。有什么想法吗?
答案 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);
});
})
}