可以說我正在爲一組值運行某種長操作。將使用setTimeout防止堆棧增長?
啓動這個操作是startNext()
,並在其中執行最後一行的功能是把自己所以它的遞歸調用,像這樣:
function startNext(){
var val = getNextValue()
workOnValue(val)
.then(doSomeMoreWork)
.then(doMoreStuff)
.then(moree)
.then(startNext);
}
這將使棧成長爲尾部遞歸在JS(尚未)中不起作用。 會改變最後一行:
.then(function(){setTimeout(startNext, 0)});
更好地工作? 它會不會填充堆棧,因爲它會爲事件循環添加一個新的操作?
你檢查過它嗎?你有沒有嘗試分析你的代碼? – Joseph