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