【发布时间】:2018-03-21 05:03:37
【问题描述】:
我正在尝试使用以下代码启动应用程序后自动启动 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() 都在执行?
【问题讨论】:
-
因为您创建了一个始终运行的承诺,无论如何。 IOW:这段代码总是执行 ->
let start = new Promise((resolve, reject) => -
@Keith 谢谢!那么我如何构建一个以后运行它的承诺呢?像这样:
function start() { return new Promise(function(resolve, reject) {}) }? -
只需将
start变成一个返回promise 的函数.. 例如..function start() { return new Promise......,然后调用await start()..
标签: javascript mysql node.js asynchronous async-await