我想知道链接 Deferreds 的最佳设计是什么。请考虑以下代码段:
组件 X:
_functionRaisingEvent: function()
{
$.when(this.raiseEvent('myEvent', args)).done(function(args){ // Check for args.cancel });
},
_raiseEvent: function(event, args)
{
var def = new $.Deferred();
// Call subscribers of myEvent in different components and pass them args
// Subscribers possibly make ajax calls
return def.promise();
},
订阅者 Y:
_onMyEvent:function(args)
{
$.ajax(....).done(function(data){ if(data == 1) args.cancel = true;});
},
订阅者 Z:
_onMyEvent:function(args)
{
document.getElementById('abx').display = 'block';
}
_functionRaisingEvent 调用 _raiseEvent 触发订阅者的回调。
我想要实现的是, _functionRaisingEvent 中的 done 回调仅在所有订阅者完成后执行。
我应该将订阅者自己的 Deferred 作为参数传递并使用管道吗?是否有任何最佳实践或设计模式?