在下面的代码中,我尝试从 ['/proc/meminfo'] 读取名为 'mapped' 的特定值,并从 读取名为 'nr_mapped' 的特定值 ['/proc/vmstat']。然后我尝试划分(映射/nrMapped),如代码所示。
我遇到的问题是,当我运行代码时,首先执行此行
' console.log('pageSize: ' + (Number(mapped) / Number(nrMapped))); '
结果为 NaN
应该怎样做才能在执行procMeminfo和procVmstat之后执行前面所说的日志语句
结果
let mapped;
let nrMapped;
const { spawn } = require('child_process');
var process = require('process');
const procMeminfo = spawn('cat', ['/proc/meminfo']);
const procVmstat = spawn('cat', ['/proc/vmstat']);
procVmstat.stdout.on('data', (data) => {
//nr_mapped value
console.log('procVmstat:stdout: ' + 'processId: ' + process.pid + '-->' + data.toString().split('\n')[33]);
nrMapped = data.toString().split('\n')[33].replace(/[^\d.]/g, '');
console.log(nrMapped);
});
procMeminfo.stdout.on('data', (data) => {
console.log('procMeminfo:stdout: ' + 'processId: ' + process.pid + '-->' + data.toString().split('\n')[19]);
mapped = data.toString().split('\n')[19].replace(/[^\d.]/g, '');
console.log(mapped);
});
console.log('pageSize: ' + (Number(mapped) / Number(nrMapped)));
输出:
pageSize: NaN
procMeminfo:stdout: processId: 12776-->Mapped: 321676 kB
321676
procVmstat:stdout: processId: 12776-->nr_mapped 80419
80419
最佳答案
利用 Promise 来等待异步函数。
示例
let promises = [ ];
promises.push(new Promise((resolve, reject) => {
procVmstat.stdout.on('data', (err, data) => {
if (err) {
return reject(err);
}
resolve(data);
// repeat the same for the other method
}
promises.push(new Promise((resolve, reject) => {
procMeminfo.stdout.on('data', (err, data) => {
if (err) {
return reject(err);
}
resolve(data);
}
Promise.all(promises).then((data) => {
console.log(data)// get the data here and manipulate the same
}, err => {
callback(err);
});
关于javascript - 如何等到检索到某些值然后继续计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47751325/