jquery延迟执行顺序

时间:2015-07-25 04:17:01

标签: javascript jquery promise

var d1 = $.Deferred();
var d2 = $.Deferred();

d1.resolve( "Fish" );
d2.resolve( "Pizza" );

// adding callbacks
$.when( d1, d2 ).done(function ( v1, v2 ) {
    console.log( v1 ); // "Fish"
    console.log( v2 ); // "Pizza"
});

在上面的示例中,即使在延迟解决后立即添加回调(立即),但仍然在控制台上打印“Fish”和“Pizza”。

有人可以向我解释一下,我哪里出错了?

代码段来源:https://api.jquery.com/jQuery.when/

1 个答案:

答案 0 :(得分:2)

这是预期的行为,没有任何错误。如果您向已经解决的承诺添加.then()处理程序,它仍将根据您添加到的承诺的状态调用刚刚添加的.then()回调。

$.when()也是如此。即使您传递的承诺都已经解决,它仍然会调用您添加到.then()返回的承诺的$.when()处理程序。

承诺“记住”他们的已解决/拒绝状态,以便即使已经解决/拒绝,也可以轻松访问它们。

承诺的一个重要特征是你可以添加.then()个处理程序,如果/当承诺得到满足时会被调用 - 无论何时发生(立即,某个时候或未来)。您,使用承诺的开发人员不必担心实现的时间,包括是否已经发生。无论时间如何,您的代码都将执行相同的操作。这是承诺之美。