setTimeoutは非ブロッキングであり、非同期です。コールバックを与え、遅延が終わると、コールバックが呼び出されます。
いくつかの実装を次に示します。
再帰の使用
コールバックで再帰呼び出しを使用できsetTimeout
ます。
function waitAndDo(times) {
if(times < 1) {
return;
}
setTimeout(function() {
// Do something here
console.log('Doing a request');
waitAndDo(times-1);
}, 1000);
}
関数の使用方法は次のとおりです。
waitAndDo(2000); // Do it 2000 times
スタック オーバーフロー エラーについて:setTimeout
コール スタックをクリアして (この質問setTimeout
を参照)、再帰呼び出しでスタック オーバーフローを心配する必要はありません。
ジェネレーターの使用 (io.js、ES6)
すでにio.js ( ES6を使用する「次の」Node.js ) を使用している場合は、エレガントなソリューションを使用して再帰なしで問題を解決できます。
function* waitAndDo(times) {
for(var i=0; i<times; i++) {
// Sleep
yield function(callback) {
setTimeout(callback, 1000);
}
// Do something here
console.log('Doing a request');
}
}
関数の使用方法は次のとおりです(coを使用):
var co = require('co');
co(function* () {
yield waitAndDo(10);
});
ところで:これは実際にループを使用しています;)
ジェネレーター関数のドキュメント。