我在nodejs中编写一个函数来向macos发送print命令。问题是我的打印命令发送成功,但我想在继续前等待收到的输出。
我的代码如下
const printer = require("node-native-printer");
const exec = require("child_process").exec;
module.exports = {
print: async function (options) {
await this.printUnix(options).then(
response => {
return response
}
).catch(error => {
return false
});
},
printUnix: async function (options) {
if (!options.filePath)
return Error('File path not specified');
let command = 'lp ';
let unixOptions = [];
await Object.keys(options).forEach(value => {
switch (value) {
case 'duplex':
if (options[value] === 'Default')
command = command + '-o sides=one-sided ';
else
command = command + '-o sides=two-sided-short-edge ';
break;
case 'color':
if (options[value])
command = command + '-o blackplot ';
break;
case 'landscape':
if (options[value])
command = command + '-o orientation-requested=4 ';
else command = command + '-o orientation-requested=3 ';
break;
}
});
command = command + options.filePath;
return await this.executeQuery(command);
},
executeQuery: async function (command) {
exec(command, function (error, stdout, stderr) {
output = {stdout, error, stderr};
if (!stdout || stderr || error)
return false;
else
return true;
});
}
};
这里的问题是函数executeQuery没有完全执行,结果返回,即未定义。如何让我的程序等待函数正确执行?
executeQuery无法按预期工作,因为您已将Async-Await与回调混合使用。
您不能将Async-await语法与回调一起使用。您必须按照以下方式宣传您的回调函数。
function(command){
return new Promise(resolve, reject){
exec(command, function (error, stdout, stderr) {
output = {stdout, error, stderr};
if (!stdout || stderr || error)
reject();
else
resolve();
})
}
}
好吧,这似乎是错的
await this.printUnix(options).then(
response => {
return response
}
).catch(error => {
return false
});
},
当您使用async / await时。你不能使用承诺回调.then
或.catch
(可能)
尝试将代码更改为这样的代码
print: async function (options) {
try {
return await this.printUnix(options)
} catch (error) {
return false
},