您的主循環正在執行setTimeout
持續運作。由於此函數的性質,您將期望看到該函數在它們之間無延遲地執行。
如果你想要近似的效果,當功能的執行時間是多小於延遲時間時,你可以使用setInterval
。這將與亞當的實踐一致。
但是對於確切的「在每個循環之間創建一個延遲」,您將需要一些回調。
先來考慮:
function main() {
doWork(items, 0, items.length);
}
function doWork(items, i, loopLength) {
// The bit in the loop
console.log(i + ". " + items[i]['name']);
priceManagement.FindPrices(items[i]['name']);
i++;
if (i < loopLength) {
delayDoWork(items, i, loopLength);
}
else {
// Do rest in the main
...
}
}
function delayDoWork(items, i, loopLength) {
setTimeout(function(items, i, loopLength)
{
doWork(items, i, loopLength);
}, 3000, items, i, loopLength);
}
這將保證環路之間的確切延遲。
編輯
你可能要爲此做更多的實驗,因爲我不是一個專家知道如何setInterval
設計在JS的工作,因爲它不是多線程的性質是什麼?起點將考慮下面的報價SO
實際上,setTimeout()會在執行隊列的末尾重新排隊新的JavaScript。
它有點工作,但它是在最後一個整數循環,它不能達到'項目'變量的內容。 –
這正是我所需要的。謝謝! –