原生版,用results和counter兩個變量維護狀態,保持順序靠那個idx變量實現jsvarhttp=require('http');varargs=process.argv;if(args.shift()==='node')args.shift();if(process.argv.length!==3){console.log('mustinput3url,got',args);process.exit();}varresults=[];varcounter=0;args.forEach(function(url,idx){http.get(url,function(res){res.on('data',function(chunk){if(!results[idx]){results[idx]='';}results[idx]+=chunk;}).on('end',function(){counter++;if(counter===args.length){results.forEach(function(res,i){console.log(args[i],res);});}});}).on('error',function(e){throwe;});});能夠完成需求,但容錯、擴展、可讀性一塌糊涂request+bluebird版varrequest=require('request');varPromise=require('bluebird');varprequest=Promise.promisify(request);varargs=process.argv;if(args.shift()==='node')args.shift();if(process.argv.length!==3){console.log('mustinput3url,got',args);process.exit();}Promise.all(args.map(function(url){returnprequest(url);})).each(function(result){varresponse=result[0];console.log(response.request.href,response.body);}).catch(function(e){console.error(e);});題目沒說并行請求還是串行,這里都是并行的,串行的話反正天然保持順序閉著眼睛打印就行