0
返回$ .Deferred()遞歸函數我有一個返回$.Deferred();
與setTimeout的
的功能如下遞歸函數:
var myTest = function (i, deferred) {
if (!deferred) {
deferred = $.Deferred();
}
if (i < 3) {
i++;
console.log("Recursion (" + i + ")!");
return myTest(i, deferred);
} else if (i === 3) {
console.log("Resolving!");
return deferred.resolve("Woohoo, reached " + i + "!");
}
}
/* Call it */
myTest(0).done(function (result) {
console.log(result);
});
這使的預期輸出:
Recursion (1)!
Recursion (2)!
Recursion (3)!
Resolving!
Woohoo, reached 3!
但是,如果我將line 8
更改爲
setTimeout(function() {
return myTest(i, deferred);
}, 500);
失敗。我如何添加一個超時到我的函數,但達到相同的結果?
你能解釋一下你想幹什麼?該邏輯似乎並沒有以任何方式使用延期。只是在最後一次迭代中返回一個強制解析延遲。 – Taplar
它失敗,因爲該函數不會等待能夠返回的東西。什麼是更高層次的目標? – charlietfl
@charlietfl現實世界的目標是等待選擇列表完成加載,以便在執行我的函數之前訪問它的值。我無法改變選擇填充的方式。我無法改變不幸的是如何填充。 – Alex