2017-12-27 23 views
0

Javascript 비동기 동작을 이해할 수 없습니다.npm 요청은 비동기입니까?

항상 '요청'모듈은 동기식이라고 생각했습니다. 그래도 코드에 사용했는데 뭔가 잘못되었습니다.

예 : 그 코드에서

download_page = function(item) { 
    page = request.get({ url: 'http://test-fdfdfd.com/' + String(item) }) 
} 
node = new App(); 
node.on('ready',() => { 
    console.log("Ready."); 
    Array.from(Array(3).keys()).forEach(item => download_page(item)); 
    node.stop() 
}) 

는, 노드는 세 가지 요청이 완료된 후에 만 ​​중지해야합니다. 그러나 그런 일은 일어나지 않았고 나는 왜 그런지 모릅니다.

누군가 내게 설명을 줄 수 있습니까?

+0

무엇 ['request' 문서]에 대해는 (https://github.com/request/request/blob/master/README.md) 모듈이 처음에 동기 될 것이라고 믿게 ? –

+0

'request()'는 항상 비동기입니다. 항상. – jfriend00

답변

0

request은 실제로 비동기입니다.

함수에서 Promise을 반환하고 모두 Promise.all을 반환 할 수 있습니다.

download_page = function(item) { 
    return new Promise((resolve, reject) => { 
     request.get({ url: 'http://test-fdfdfd.com/' + String(item) }, (err, data) => { 
      if (err) { 
       reject(err); 
       return; 
      } 
      resolve(data); 
     }); 
    }); 
} 
node = new App(); 
node.on('ready',() => { 
    console.log("Ready."); 
    Promise.all(Array.from(Array(3).keys()).map(item => download_page(item))); 
    node.stop() 
})