현재 버전

javascript node.js promise async await

await이 동작 안 하는 문제


안녕하세요.


await 관련 문의 드립니다.


제가 진행하고 있는 작업은

검색어와 검색할 페이지 갯수를 받아서 구글search 정보를 가져오는 것인데요.(크롤링)


코드는 아래와 같습니다.


    let promises = []; //promise 들이 저장될 배열
    let totalData = []; //최종 데이터

    //요청 페이지 수 만큼 request 요청 
    let makeRequest = function(url) { 
      return new Promise((resolve, reject) => {
        request(url, function(err, response, body){
          if(body == null) { return reject('fail'); }

          const $ = cheerio.load(body);
          let parsingData = $('.g .r a');
          console.log(parsingData);

          for(let i = 0; i < parsingData.length; i++){
              totalData.push(parsingData[i]);
          }

          return resolve('success');
        });
      });
    }

    //url을 makeRequest로 넘기고 promises에 push
    for(let i = 0; i < pageCount; i++){
      let url = `https://google.com/search?q=${ searchWord }&start=${i}0`
      promises.push(makeRequest(url));
    }


    (async function(){
      try{
        //모든 Promise가 완료되면 실행
        await Promise.all(promises);   
        console.log(totalData); 
        return res.json(true);
      }
      catch(error){
        console.log(error);
        return res.json(false);
      }
    });



근데 문제는..


async await 자체가 실행이 안된건지..

모든 Promise가 resolved 상태로 변해도.. 

console.log(totalData); 가 실행이 안 되는 것입니다..


디버깅을 하면서 보니

모든 Promise는 pending 상태에서 resolved 상태로 변경되는 것을 확인하였습니다.



크롤링도 정상적으로 동작하여 원하는 정보를 가져오는 것도 확인하였습니다.




그런데... ㅠㅠㅠㅠ

async, await이 동작 안하는 이유를 도무지 모르겠습니다...


어제부터 머리 꽁꽁 싸매다가

조언을 구하고자 글을 올립니다 ㅠ_ㅠ


수정 이력

2018-08-07 08:54:28 에 아래 내용에서 변경 됨 #7

안녕하세요.


await 관련 문의 드립니다.


제가 진행하고 있는 작업은

검색어와 검색할 페이지 갯수를 받아서 구글search 정보를 가져오는 것인데요.(크롤링)


코드는 아래와 같습니다.


    let promises = []; //promise 들이 저장될 배열
    let totalData = []; //최종 데이터

    //요청 페이지 수 만큼 request 요청 
    let makeRequest = function(url) { 
      return new Promise((resolve, reject) => {
        request(url, function(err, response, body){
          if(body == null) { return reject('fail'); }

          const $ = cheerio.load(body);
          let parsingData = $('.g .r a');
          console.log(parsingData);

          for(let i = 0; i < parsingData.length; i++){
              totalData.push(parsingData[i]);
          }

          return resolve('success');
        });
      });
    }

    //url을 makeRequest로 넘기고 promises에 push
    for(let i = 0; i < pageCount; i++){
      let url = `https://google.com/search?q=${ searchWord }&start=${i}0`
      promises.push(makeRequest(url));
    }


    (async function(){
      try{
        //모든 Promise가 완료되면 실행
        await Promise.all(promises);   
        console.log(totalData); 
        return res.json(true);
      }
      catch(error){
        console.log(error);
        return res.json(false);
      }
    });



근데 문제는..


async await 자체가 실행이 안된건지..

모든 Promise가 resolved 상태로 변해도.. 

console.log(totalData); 가 실행이 안 되는 것입니다..


디버깅을 하면서 보니

모든 Promise는 pending 상태에서 resolved 상태로 변경되는 것을 확인하였습니다.



크롤링도 정상적으로 동작하여 원하는 정보를 가져오는 것도 확인하였습니다.




그런데... ㅠㅠㅠㅠ

async, await이 동작 안하는 이유를 도무지 모르겠습니다...

이전에 사용할 땐 잘 됐었는데....


어제부터 머리 꽁꽁 싸매다가

조언을 구하고자 글을 올립니다 ㅠ_ㅠ

2018-08-07 08:54:19 에 아래 내용에서 변경 됨 #6

안녕하세요.


await 관련 문의 드립니다.


제가 진행하고 있는 작업은

검색어와 검색할 페이지 갯수를 받아서 구글search 정보를 가져오는 것인데요.(크롤링)


코드는 아래와 같습니다.


    let promises = []; //promise 들이 저장될 배열
    let totalData = []; //최종 데이터

    //요청 페이지 수 만큼 request 요청 
    let makeRequest = function(url) { 
      return new Promise((resolve, reject) => {
        request(url, function(err, response, body){
          if(body == null) { return reject('fail'); }

          const $ = cheerio.load(body);
          let parsingData = $('.g .r a');
          console.log(parsingData);

          for(let i = 0; i < parsingData.length; i++){
              totalData.push(parsingData[i]);
          }

          return resolve('success');
        });
      });
    }

    //url을 makeRequest로 넘기고 promises에 push
    for(let i = 0; i < pageCount; i++){
      let url = `https://google.com/search?q=${ searchWord }&start=${i}0`
      promises.push(makeRequest(url));
    }


    (async function(){
      try{
        //모든 Promise가 완료되면 실행
        await Promise.all(promises);   
        console.log(totalData); 
        return res.json(true);
      }
      catch(error){
        console.log(error);
        return res.json(false);
      }
    });



근데 문제는..


async await 자체가 실행이 안된건지..

모든 Promise가 resolved 상태로 변해도.. 

console.log(totalData); 가 실행이 안 되는 것입니다..


디버깅을 하면서 보니

모든 Promise는 pending 상태에서 resolved 상태로 변경되는 것을 확인하였습니다.



크롤링도 정상적으로 동작하여 원하는 정보를 가져오는 것도 확인하였습니다.




그런데... ㅠㅠㅠㅠ

뭐가 문제인지 도무지 모르겠습니다...


어제부터 머리 꽁꽁 싸매다가

조언을 구하고자 글을 올립니다 ㅠ_ㅠ

2018-08-07 08:46:50 에 아래 내용에서 변경 됨 #5

안녕하세요.


await 관련 문의 드립니다.


제가 진행하고 있는 작업은

검색어와 검색할 페이지 갯수를 받아서 구글search 정보를 가져오는 것인데요.(크롤링)


코드는 아래와 같습니다.

let promises = []; //promise 들이 저장될 배열
let totalData = []; //최종 데이터

//요청 페이지 수 만큼 request 요청
let makeRequest = function(url) {
return new Promise((resolve, reject) => {
request(url, function(err, response, body){
if(body == null) { return reject('fail'); }

const $ = cheerio.load(body);
let parsingData = $('.g .r a');
console.log(parsingData);

for(let i = 0; i < parsingData.length; i++){
totalData.push(parsingData[i]);
}

return resolve('success');
});
});
}

//url을 makeRequest로 넘기고 promises에 push
for(let i = 0; i < pageCount; i++){
let url = `https://google.com/search?q=${ searchWord }&start=${i}0`
promises.push(makeRequest(url));
}


(async function(){
try{
//모든 Promise가 완료되면 실행
await Promise.all(promises);
console.log(totalData);
return res.json(true);
}
catch(error){
console.log(error);
return res.json(false);
}
});


근데 문제는..


async await 자체가 실행이 안된건지..

모든 Promise가 resolved 상태로 변해도.. 

console.log(totalData); 가 실행이 안 되는 것입니다..


디버깅을 하면서 보니

모든 Promise는 pending 상태에서 resolved 상태로 변경되는 것을 확인하였습니다.

크롤링도 정상적으로 동작하여 원하는 정보를 가져오는 것도 확인하였습니다.


그런데... ㅠㅠㅠㅠ

뭐가 문제인지 도무지 모르겠습니다...


어제부터 머리 꽁꽁 싸매다가

조언을 구하고자 글을 올립니다 ㅠ_ㅠ

2018-08-07 08:41:27 에 아래 내용에서 변경 됨 #4

안녕하세요.


await 관련 문의 드립니다.


제가 진행하고 있는 작업은

검색어와 검색할 페이지 갯수를 받아서 구글search 정보를 가져오는 것인데요.(크롤링)


코드는 아래와 같습니다.

let promises = []; //promise 들이 저장될 배열
let totalData = []; //최종 데이터

//요청 페이지 수 만큼 request 요청
let makeRequest = function(url) {
return new Promise((resolve, reject) => {
request(url, function(err, response, body){
if(body == null) { return reject('fail'); }

const $ = cheerio.load(body);
let parsingData = $('.g .r a');
console.log(parsingData);

for(let i = 0; i < parsingData.length; i++){
totalData.push(parsingData[i]);
}

return resolve('success');
});
});
}

//url을 makeRequest로 넘기고 promises에 push
for(let i = 0; i < pageCount; i++){
let url = `https://google.com/search?q=${ searchWord }&start=${i}0`
promises.push(makeRequest(url));
}


(async function(){
try{
//모든 Promise가 완료되면 실행
await Promise.all(promises);
console.log(totalData);
return res.json(true);
}
catch(error){
console.log(error);
return res.json(false);
}
});


근데 문제는..


async await 자체가 실행이 안된건지..

모든 Promise가 resolve 상태로 변해도.. 

console.log(totalData); 가 실행이 안 되는 것입니다..


디버깅을 하면서 보니

모든 Promise는 pending 상태에서 resolved 상태로 변경되는 것을 확인하였습니다.

크롤링도 정상적으로 동작하여 원하는 정보를 가져오는 것도 확인하였습니다.


그런데... ㅠㅠㅠㅠ

뭐가 문제인지 도무지 모르겠습니다...


어제부터 머리 꽁꽁 싸매다가

조언을 구하고자 글을 올립니다 ㅠ_ㅠ

2018-08-07 08:38:09 에 아래 내용에서 변경 됨 #3

안녕하세요.


await 관련 문의 드립니다.


제가 진행하고 있는 작업은

검색어와 검색할 페이지 갯수를 받아서 구글search 정보를 가져오는 것인데요.(크롤링)


코드는 아래와 같습니다.

let promises = []; //promise 들이 저장될 배열
let totalData = []; //최종 데이터

//요청 페이지 수 만큼 request 요청
let makeRequest = function(url) {
return new Promise((resolve, reject) => {
request(url, function(err, response, body){
if(body == null) { return reject('fail'); }

const $ = cheerio.load(body);
let parsingData = $('.g .r a');
console.log(parsingData);

for(let i = 0; i < parsingData.length; i++){
totalData.push(parsingData[i]);
}

return resolve('success');
});
});
}

//url을 makeRequest로 넘기고 promises에 push
for(let i = 0; i < pageCount; i++){
let url = `https://google.com/search?q=${ searchWord }&start=${i}0`
promises.push(makeRequest(url));
}


(async function(){
try{
//모든 Promise가 완료되면 실행
await Promise.all(promises);
console.log(totalData);
return res.json(true);
}
catch(error){
console.log(error);
return res.json(false);
}
});


근데 문제는..


async await 자체가 실행이 안된건지..

모든 Promise가 resolve 상태로 변해도.. 

console.log(totalData); 가 실행이 안 되는 것입니다..


디버깅을 하면서 보니

모든 Promise는 pending 상태에서 resolved 상태로 변경되는 것을 확인하였습니다.

그런데... ㅠㅠㅠㅠ

뭐가 문제인지 도무지 모르겠습니다...


어제부터 머리 꽁꽁 싸매다가

조언을 구하고자 글을 올립니다 ㅠ_ㅠ

2018-08-07 08:35:56 에 아래 태그에서 변경 됨 #2
2018-08-07 08:35:11 에 아래 내용에서 변경 됨 #1

안녕하세요.


await 관련 문의 드립니다.


제가 진행하고 있는 작업은

검색어와 검색할 페이지 갯수를 받아서 구글search 정보를 가져오는 것인데요.


코드는 아래와 같습니다.

let promises = []; //promise 들이 저장될 배열
let totalData = []; //최종 데이터

//요청 페이지 수 만큼 request 요청
let makeRequest = function(url) {
return new Promise((resolve, reject) => {
request(url, function(err, response, body){
if(body == null) { return reject('fail'); }

const $ = cheerio.load(body);
let parsingData = $('.g .r a');
console.log(parsingData);

for(let i = 0; i < parsingData.length; i++){
totalData.push(parsingData[i]);
}

return resolve('success');
});
});
}

//url을 makeRequest로 넘기고 promises에 push
for(let i = 0; i < pageCount; i++){
let url = `https://google.com/search?q=${ searchWord }&start=${i}0`
promises.push(makeRequest(url));
}


(async function(){
try{
//모든 Promise가 완료되면 실행
await Promise.all(promises);
console.log(totalData);
return res.json(true);
}
catch(error){
console.log(error);
return res.json(false);
}
});


근데 문제는..


async await 자체가 실행이 안된건지..

모든 Promise가 resolve 상태로 변해도.. 

console.log(totalData); 가 실행이 안 되는 것입니다..


디버깅을 하면서 보니

모든 Promise는 pending 상태에서 resolved 상태로 변경되는 것을 확인하였습니다.

그런데... ㅠㅠㅠㅠ

뭐가 문제인지 도무지 모르겠습니다...


어제부터 머리 꽁꽁 싸매다가

조언을 구하고자 글을 올립니다 ㅠ_ㅠ