こんにちは、次のhttp要求がサーバーに送信される前に50msを許可しようとしています。要求が行われました。ループされたHTTP要求で遅延を許可する方法も、要求が行われたときにPromise.allを使用して検出します。
私は何をしたいかを例示するために例を挙げました。そこで、以下
は私の例である急行API
app.get('/morans/test', (req, res) => {
console.log(`start test request`);
let targetUrl = `http://-domain-/solr/genea_expression/smplGeoclust?q=text:"GO:0003674"&stats.facet=geohash_3&rows=10320`;
let i = 0;
let promises = [];
console.log(`making request ${i}`);
for (let i = 0; i < 200; i++) {
setTimeout(
() => {
let testReq = new Promise((resolve, reject) => {
http.get(targetUrl, (result) => {
result.on('data', (chunk) => {
console.log(`working ${i}`);
}).on('end',() => {
console.log(`ending ${i}`);
}).on('error', (err) => {
console.log(`this is error message ${err}`);
})
})
});
promises.push(testReq);
}, 50 * i
)
}
Promise.all(promises).then(() => {
console.log(`done`);
});
});
遅延が正常に動作します。しかし、Promise.all(promises)...
は時期尚早なトリガー(最初の要求が行われるとすぐにconsole.log('done')
トリガー)を取得しています。タイムアウトがなくてもうまく動作するので、setTimeout
は、約束を約束してpromises
配列にプッシュするのに十分な時間がないと考えています。 HTTP要求が50msごとに行われるようにコードを記述することはできますが、すべての要求が正常に返された時点も知っていますか?
ありがとうございました!魅力のように働く。また、 'resolve()'の素晴らしいキャッチに感謝します。私は実際のAPI上にそれを持っていましたが、テストAPIにそれを入れるのを忘れました。助けをありがとう! – forJ