2016-04-18 6 views
0

httpリクエストライブラリgotを使用しています。このパッケージでは、http接続は非同期で、高速で、簡単に入力できます。 「got」は、gotが私にとっていくつかの課題をもたらす有望なパッケージだということです。 1つは、gotへの参照を回避する方法がわかりません。1回のコールバックで複数の約束を非同期にキューに入れて実行できますか?

私がする必要があるのは、ファイルストリームと一緒にgotを使用していくつかのURLのページコンテンツをダウンロードすることです。 これらのストリームのすべてが完了したら、私はコード内で続行します。

約束事の配列を作る代わりに、私は応答オブジェクトの配列を取得しています。

// after all got's have executed 
promises.all(promises).then(() => { 
    console.log('all promises resolved'); 
} 

const getFile = (fileUrl) => { 
    return new Promise((resolve) => { 
    got.stream(fileUrl).pipe(fs.createWriteStream(path.basename(fileUrl))) 
    .on('finish',() => { 
     successMessage('downloaded ' + fileUrl + '!'); 
     resolve(); 
    }); 
    }); 
}; 

// create an array of these got promises 
let promises = [] 
for (let file of body.files) { 
    promises.push(getFile(file)); 
} 


getFileヘルパーが存在する理由は、got秒のすべてを実行した後、私はpromise.allコールを使用できるように約束してgotをラップすることですpromises.allが予期したとおりに動作するように、最初のスニペットを変更する方法を理解する助けを求めています。

+2

これは 'Promise.all(約束)'ですが、あなたのコードは動作するはずです。エラーは何ですか? – Bergi

+1

あなたはちょうどバグBergiを発見したと思う。私は誰かがあなたのよく獲得したインターネットポイントを盗む前にその答えを投稿したいと思います! – Acey

+0

@Bergiあなたは完全な応答として、それは私のために働いているとあなたはこの1つの正しい答えに値する投稿する必要があります。ありがとう! –

答えて

1

プロミス集約関数は、Promise.all()ではなくpromises.all()と呼ばれます。

関連する問題