javascript - 如何等到检索到某些值然后继续计算

标签 javascript node.js

在下面的代码中,我尝试从 ['/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/

相关文章:

javascript - 在 Chrome 扩展程序中获取当前页面 SSL 证书的指纹

javascript - 将 div 从一个窗口拖到另一个窗口

javascript - 带有错误事件的管道

Node.js Soap 示例客户端无法运行

node.js - MongoSkin "Cannot read property ' 未定义的应用'

javascript - Angularjs 指令从 Controller 中的 ajax 调用获取数据

php - JavaScript 和 PHP 中的 Web 服务之间的安全通信

javascript - 尝试将 SVG 对象的 javascript 数组保存到 SQL

iphone - 3G 连接上的 WebSockets

jquery - 如何正确发送带有文本和文件输入字段的表单数据?