亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求解一道node小題目

求解一道node小題目

長風秋雁 2019-04-07 11:18:22
在nodeschool上學習時遇到的問題:learnyounode里的第九題:寫一個小程序,要求輸入三個參數url,使用該程序模擬三次get請求分別從這三個url獲取數據,全部返回后打印到控制臺上。要求:打印出的響應數據要和三個url參數的順序一樣,即打印出的第一條應該是第一個url返回的數據,url由命令行參數提供(process.argv)。因為node是異步的,所以不知道應該如何控制這個輸出的順序,求幫忙!
查看完整描述

2 回答

?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

原生版,用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);
});
題目沒說并行請求還是串行,這里都是并行的,串行的話反正天然保持順序閉著眼睛打印就行
                            
查看完整回答
反對 回復 2019-04-07
  • 2 回答
  • 0 關注
  • 318 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號