learnyounode 워크샵에서 "비공개 비동기"수업에 대한 해결책으로 다음이 왜 작동하지 않는지 설명 할 수 있습니까?learnyounode - 저글링 비동기 - 왜 내 솔루션 작업을하지 않습니까?
FYI 도움이 될 경우 로그 라인을 남겨 두었습니다. 내 솔루션과 내가 온라인에서 찾은 답변의 근본적인 차이점을 보려고 고심하고 있습니다. https://github.com/olizilla/nodeschooling/blob/master/learnyounode-answers/09-juggling-async.js
미리 감사드립니다! http.get는 비동기이며, "인덱스"변수가 신뢰 할 수있는 경우 https://github.com/olizilla/nodeschooling/blob/master/learnyounode-answers/09-juggling-async.js
urls.forEach(function (item, index) {
http.get(item, function (req) {
req.setEncoding('utf8')
req.pipe(concat(function (res) {
data[index] = res;
responseCount++
if (responseCount === urls.length) {
console.log(data.join('\n'));
}
}))
})
:
var urlList = process.argv.slice(2, process.argv.length);
//console.log(urlList);
var urlResponseList = {};
for(var i=0; i < urlList.length; i++)
{
urlResponseList[urlList[i]] = '';
}
var http = require('http');
console.log(urlList);
for(var i = 0; i < urlList.length; i++) {
//console.log(i);
var url = urlList[i];
console.log("1 " + url);
http.get(url, function (response) {
console.log("2 " + url);
console.log("3 " + i);
response.setEncoding('utf8');
response.on('data', function (data) {
urlResponseList[url] = urlResponseList[url] + data;
});
response.on('end', function() {
//console.log(stringResponse);
//console.log(url);
});
});
}
console.log(urlResponseList);
for(var i=0; i < urlList.length; i++){
console.log(urlResponseList[urlList[i]]);
}
나는 또한 내가 온라인 여기에 게시 발견 솔루션에 대한 질문이 있습니다 http.get 콜백은 (foreach 루프에서) 콜백 외부에서 설정 되더라도?
아래의 업데이트 된 솔루션을 게시하고 싶습니다. 모든 도움에 감사드립니다. 내 문제는 클로저가 어떻게 작동하는지 완전히 이해하지 못했기 때문입니다.
var urlList = process.argv.slice(2, process.argv.length);
//console.log(urlList);
var urlResponseList = [];
for(var i=0; i < urlList.length; i++)
{
urlResponseList.push('');
}
var http = require('http');
var responseCount = 0;
//console.log(urlList);
urlList.forEach(function(item, index){
//console.log(i);
var url = urlList[index];
//console.log("1 " + url);
http.get(item, function (response) {
//console.log("2 " + url);
//console.log("3 " + i);
response.setEncoding('utf8');
response.on('data', function (data) {
urlResponseList[index] = urlResponseList[index] + data;
});
response.on('end', function() {
responseCount++;
if(responseCount == urlList.length)
{
//console.log("help");
console.log(urlResponseList.join('\n'));
}
});
});
});
//console.log(urlResponseList);
을 ?? 콘솔의 출력은 무엇입니까? – Ravi