我正在使用Node.js,这是代码:
const { exec } = require('child-process-promise');
const app = new App();
const isLine = (line) => {
line = line.split(' ');
return !Number.isNaN(Date.parse(line[0]));
};
const formatLine = (line) => {
line = line.split(' ');
return [line[0], line[1], line.splice(2).join(' ')];
};
const readLog = app => app.client.getMainProcessLogs()
.then(logs => logs.filter(isLine).map(formatLine));
const printLogs = (logs) => {
logs.forEach((log) => {
console.log('\t\x1b[33m%s \x1b[34m%s\x1b[0m', log[0], log[1], log[2]);
});
}
exec('xdotool key XF86AudioPlay')
.then(() => readLog(app))
.then((log) => {
assert.equal(log[0][2], 'Media key pressed: \'Play\'');
printLogs(log);
});
这是一些上下文,一旦exec
被执行,我正在尝试运行readLog
,它将尝试从输出中读取日志,返回一个二维数组(在过滤和格式化之后) ,将用于断言它的有效性并打印日志。
问题在于,有时候,我会收到一个错误:TypeError: Cannot read property '2' of undefined
,根据我的理解,这意味着某个地方会出现竞争状况。 assert
语句中抛出错误。再一次,这种情况继续发生,因此很难再现。
我做错了什么?我读过We have a problem with promises by Nolan Lawson,我觉得我已经遵循了所有建议。在每个then
内返回,始终是Promise
或同步值(已过滤和格式化的日志数组)。