无法从节点js中的函数获得承诺
我正在尝试从我的node函数执行命令,但是我无法从该函数中获得成功,任何人都可以检查我的代码并帮助我解决此问题吗?
function exec_api() {
return new Promise( function(resolve){
const execSync = require('child_process').exec;
execSync('DB_HOST='+process.env.NODEJS_UNITTEST_DB_HOST+' DB_DATABASE='+process.env.NODEJS_UNITTEST_DB_DATABASE+' DB_USERNAME='+process.env.NODEJS_UNITTEST_DB_USERNAME+' DB_PASSWORD='+process.env.NODEJS_UNITTEST_DB_PASSWORD+' PORT='+process.env.NODEJS_UNITTEST_SERVICE_PORT+' sudo nodemon server.js', (err, stdout, stderr) => {
console.log("sdsdsd23");
//console.log(`stdout:`+stdout);
//console.log(`stderr:`+stderr);
if (err) {
resolve(false);
} else {
resolve(true);
}
});
});
}
it('Exec API', function() {
this.timeout(3500);
return exec_api().should.eventually.be.true;
});
回答如下:使用承诺时,您必须等待其解决,然后才能获得已解决的值。
有两种方法,可以通过使函数return
像这样解决async
:
it('Exec API', async function() {
this.timeout(3500);
const res = await exec_api();
return res;
});
或
像这样在回调上使用then
方法:
it('Exec API', function() {
this.timeout(3500);
let result;
exec_api().then(res => result = res)
return result;
});