节点 js 上的多个 child_process exec

Multiple child_process exec on node js

我正在尝试在 nodejs 上使用 curl 获取数据。我需要为每个查询 运行 多个 child_process 以便立即检索数据。

router.post('/curl/', function* () {

      var urls = this.request.body.url;
      var exec = require('child_process').exec;

      var promise = new Promise((resolve, reject) => {

                var count = urls.length;

                var res = _.map(urls, (stream) => {
                     // stream = {url:'http://url1.com'};

                     var command = 'curl '+stream.url+';

                     exec(command, (error, stdout, stderr) => {
                          if (error !== null) {
                              console.log('exec error: ' + error);
                          }
                          return stdout;
                     });
                });

                resolve(res);
     });

      this.body = yield promise;
 });

此解析'[null, null]'; 我尝试使用Promise.map,但也失败了。

如果我发出单个请求(没有 _.map())- 它 returns HTML 所请求的页面,如我所料。 如何 运行 多个 child_process 满足我的要求?

这是一个没有生成器的变体 (function*)。 目前还不清楚你想用发电机做什么。

var exec = require('child_process').exec;

router.post('/curl/', function() {

  function processUrl(url) {
    return new Promise((resolve, reject) => {
      var command = 'curl ' + stream.url;
      exec(command, (error, stdout, stderr) => {
        if (error)
          return reject(error);
        return resolve(stdout);
      });
    });
  }

  var urls = this.request.body.url;

  var allPromises = urls.map(url => {
    return processUrl(url);
  });

  Promise.all(allPromises)
    .then(htmls => {
      console.log('HTML of pages:', htmls.length);
    });
});