2017-12-27 18 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() 
}) 

、ノードは3つの要求が完了した後にのみ停止する必要があります。しかし、それは起こらなかったし、私は理由を知らない。

誰かから説明をいただけますか?

+0

? –

+0

'request()'は常に非同期です。常に。 – jfriend00

答えて

0

requestは実際には非同期です。

あなたの関数からPromiseを返し、次にPromise.allを返すことができます。 [ `request`のドキュメント](https://github.com/request/request/blob/master/README.md)についてのモジュールが最初の場所での同期であろうと信じるようにあなたを導いた何

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() 
}) 
関連する問題