我正在尝试在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()),则它将返回所请求页面的HTML,这与我期望的一样。
如何为我的请求运行多个child_process?
最佳答案
这是没有生成器(function*
)的变体。
目前尚不清楚您打算如何使用Generator。
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);
});
});