gpt4 book ai didi

javascript - 当有条件阻止这种情况发生时,为什么 console.log() 都会执行?

转载 作者:行者123 更新时间:2023-11-29 10:20:17 26 4
gpt4 key购买 nike

一旦我使用以下代码启动我的应用程序,我将尝试自动启动 MySQL 服务器:

var exec = require('child_process').exec;

let check = new Promise((resolve, reject) =>
exec('mysql-ctl status', function(error, stdout, stderr) {
if (error)
reject(error);
else
resolve(stderr);
})
);

let start = new Promise((resolve, reject) =>
exec('mysql-ctl start', function(error, stdout, stderr) {
if (error)
reject(error);
else
resolve(console.log("MySQL server is up!"));
})
);

async function check_status() {
return await check;
}

async function start_server(status) {
if (status.trim() == 'MySQL is stopped') {
console.log("Starting MySQL server...");
await start;
} else console.log("MySQL server was up...");
}

module.exports = async function() {
check_status()
.then((status) => start_server(status))
.catch((error) => console.log("Error: " + error));
};

但是,如果服务器已经启动,我会得到以下输出:

App Started. Listening on PORT 8080
MySQL server was up...
MySQL server is up!

当有条件阻止这种情况发生时,为什么 console.log() 都在执行?

最佳答案

当你调用new Promise(resolve,reject => ())时,你就开始执行提供给promise的函数。该函数是异步执行的。

因此,在您的情况下,您开始检查 MySQL 是否正在运行,然后启动用于启动 MySQL 的脚本,但在检查完成之前。

module.exports = async function() {
check_status()
.then((status) => start_server(status))
.catch((error) => console.log("Error: " + error));
};

执行此函数时,您只需等待 check_status() 中的 check 结果。但该检查是在创建 check 变量时启动的。

其结果在您的 then 方法中 => MySQL 服务器已启动!。当执行 check 时,start 也正在执行,并且由于 MySQL 服务器未启动,您将得到 Starting MySQL server...

关于javascript - 当有条件阻止这种情况发生时,为什么 console.log() 都会执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49393831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com