???????????????

??????????·???????????????????????в?????????????????????????????????

??????????f1??f2???????????f1??????????????????jQuery??д??????


f1.on('done'?? f2);


???????????д????????????f1????done????????f2???????f1???и?д??


1.function f1(){  
2.setTimeout(function () {  
3.// f1?????????  
4.f1.trigger('done');  
5.}?? 1000);  
6.}
 


????f1.trigger('done')????????????????????done??????????????f2??

????????????????????????????????????????????????????????????????????????“????”??Decoupling???????????????黯???????????????????????????????????????ú????????

????????????/????

??????????“???”?????????????“???”??

???????????????????“???????”?????????????????????????“????”??publish?????????????????????????????“????”??subscribe???????????????????????????????С??????“????/??????”??publish-subscribe pattern???????“???????”??observer pattern????

??????????ж?????????????????Ben Alman??Tiny Pub/Sub??????jQuery??????????

?????????f2??“???????”jQuery????“done”????


jQuery.subscribe("done"?? f2);


???????f1?????????д??


1.??function f1(){  
2.setTimeout(function () {  
3.// f1?????????  
4.jQuery.publish("done");  
5.}?? 1000);  
6.}
 


????jQuery.publish(“done”)????????f1?????????“???????”jQuery????“done”???????????f2????С?

????????f2?????к??????????????unsubscribe????


jQuery.unsubscribe("done"?? f2);


???????????????????“???????”????????????????????????????????????“???????”??????????????????????ж??????????????????????С?

???????Promises????

????Promises??????CommonJS??????????????淶?????????????????????

??????????????????????????????????Promise??????????????then?????????????????????????磬f1????????f2??????д???


f1().then(f2);


????f1??????????д????????????jQuery????????


1.function f1(){  
2.var dfd = $.Deferred();  
3.setTimeout(function () {  
4.// f1?????????  
5.dfd.resolve();  
6.}?? 500);  
7.return dfd.promise;  
8.}
 


????????д?????????????????????????д??????????????????ú?????????????????????????????????????????????

???????磬???????????????


f1().then(f2).then(f3);


????????磬??????????????????????


f1().then(f2).fail(f3);


????????????????????????????????е???????????????????????????????????????????????????С???????????????????????????????????????????????д???????????????