简单的jquery延迟队列

cou*_*lix 0 javascript deferred jquery-deferred

我有一个同步的方法foo(param).

我希望可以自由地调用foo(param)而不执行实际的foo()调用,直到稍后的特定事件.

它似乎是延迟/承诺的一个很好的候选者,但我必须做错事,因为超时没有任何影响.

log方法是否应该返回promise?

var log = function(message) {
    $('#log').append('<p>' + message + '</p>');
};

$(function() {
 
    var q = new $.Deferred();
    
    q.then(log("1"));
    q.then(log("2"));
    q.then(log("3"));
    q.then(log("4"));
    q.then(log("5"));
    q.then(log("6"));
    q.then(log("7"));
    
    setTimeout(function(){
        q.resolve();
    }, 10000);
    
    
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="log"></div>
Run Code Online (Sandbox Code Playgroud)

And*_*gee 5

是的,你的话q.then(log("..."))应该说q.then(function() { log("...") }).

你的log函数很好,但你的代码目前的工作方式是你已经调用它并将其返回值传递给then函数.这就是为什么你需要创建一个新函数,延迟函数将在以后解析时调用.