节点js

时间:2017-02-10 06:25:41

标签: javascript node.js child-process

我正在尝试使用curl在nodejs上获取数据。我需要为每个查询运行多个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()) - 它会返回所请求页面的HTML,正如我所期望的那样。 如何为我的请求运行多个child_process?

1 个答案:

答案 0 :(得分:1)

这是一个没有生成器(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);
    });
});
相关问题