我希望在 JavaScript/jQuery 中对任意数量的可能可选函数调用进行排队。例如,在运行第二个(或第三个、第四个等)函数或 AJAX 调用之前,我可能需要确保用户已通过身份验证并设置了 cookie。
我考虑使用最近添加的 jQuery.Deferred 来执行此操作,但发现调用的触发顺序无关紧要(真正的异步样式)。另外,我读到一旦解决了 Deferred 实例,就不可能取消解决它。
这就是我目前所处的位置。最初,我正在考虑将 Deferred 实例设置为已解析,然后在堆栈中出现可选函数时取消解析它。
var d = $.Deferred(),
chained = d,
d.resolve(),
div = extra.find( "div:first" );
if ( extra.attr( "requires-auth" ) != undefined && !config.user_is_authenticated )
chained = chained.pipe( authenticate );
if ( div.length )
chained = chained.pipe( prepareExtra( div ) );
// When the two optional methods are resolved, show the content
chained.done( function() {
extra.fadeIn( 500 )
} );
我的问题是,在纯 JavaScript/jQuery 中排队(0 到 N)AJAX 调用的最佳方式是什么?(不使用插件)。
达!
编辑 2:已解决! 这是一些工作示例,一个不带 AJAX,一个带: https ://gist.github.com/1021429 https://gist.github.com/1021435