$ .when vs Q.when与Deferreds的行为

时间:2014-02-05 03:33:10

标签: jquery promise q

我正在使用Q.js库来做承诺。我已经尝试了以下场景,其中一个函数在执行某些代码之前等待另一个函数来解析延迟,并且它可以与jQuery本机promise一起使用。但是,相同的代码会立即返回Q.js.有什么想法吗?

小提琴:http://jsfiddle.net/ArN8F/5/


HTML:

<button id='go'>Go</button>
<p id='txt'></p>
<p id='txt2'></p>

jQuery代码(等待2秒然后更改文本):

$(document).ready(function () {
    var dfd = $.Deferred();
    $('#go').click(function () {
        $('#txt').text('Clicked!');
        promised();
        setTimeout(dfd.resolve, 2000);
    });

    function promised() {
        $.when(dfd).done(function () {
            $('#txt2').text('Done');
        });
    }
})

Q.js代码(立即更改文本):

$(document).ready(function () {
    var dfd = Q.defer();
    $('#go').click(function () {
        $('#txt').text('Clicked!');
        promised();
        setTimeout(dfd.resolve, 2000);
    });

    function promised() {
        Q.when(dfd, function () {
            $('#txt2').text('Done');
        });
    }
})

1 个答案:

答案 0 :(得分:2)

我猜你应该像这样使用Q.when

Q.when(dfd.promise, function () { 
     // .. 
});

请注意,它是dfd.promise,而不仅仅是dfd

工作demo