Javascript nodejs同时处理多个子流程

Javascript nodejs同时处理多个子流程,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我有一个情况,我需要创建n个子进程,对于每个子进程,我需要提供标准数据和预期输出,如果预期输出与生成的输出相同,子进程的结果就是成功。如果所有这样的子流程都是成功的,那么状态需要发送给用户。如何在nodejs中以非阻塞方式执行上述操作?承诺 我个人使用蓝鸟,这里有一个例子也使用它。 我希望您能理解,如果您不理解,请随时提问:- var Promise = require('bluebird') var exec = require('child_process').exec // Arra

我有一个情况,我需要创建n个子进程,对于每个子进程,我需要提供标准数据和预期输出,如果预期输出与生成的输出相同,子进程的结果就是成功。如果所有这样的子流程都是成功的,那么状态需要发送给用户。如何在nodejs中以非阻塞方式执行上述操作?

承诺

我个人使用蓝鸟,这里有一个例子也使用它。 我希望您能理解,如果您不理解,请随时提问:-

var Promise = require('bluebird')
var exec   = require('child_process').exec

// Array with input/output pairs
var data = [
  ['input1', 'output1'],
  ['input2', 'output2'],
  ...
]

var PROGRAM = 'cat'

Promise.some(data.map(function(v) {
  var input = v[0]
  var output = v[1]

  new Promise(function(yell, cry) {
    // Yes it is ugly, but exec is just saves many lines here
    exec('echo "' + input + '" | ' + PROGRAM, function(err, stdout) {
      if(err) return cry(err)
      yell(stdout)
    })
  }).then(function(out) {
    if(out !== output) throw new Error('Output did not match!')
  })
}), data.length) // Require them all to succeed
.then(function() {
  // Send succes to user
}).catch(function() {
  // Send failure to the user
})

我使用spawn创建新进程,为了获得输出和错误流,我使用了2个变量,数据将被附加到其中。问题是,当第二个输入集再次求值时,第一个输入集的数据将在字符串中显示,这是什么意思?您在设置的全局范围中有一个变量?为什么?我能解决这个问题,谢谢你的帮助。