2015-10-06 181 views
0

我正在使用DOJO 1.10.4,我需要在主題a,b,c廣播後運行方法。類似的承諾dojo/promise/allDojo的發佈/訂閱 - 如何訂閱多個主題

DOJO是否有此功能,任何想法如何解決?

Module A 
topic.publish('a'); 

Module B 
topic.publish('b'); 

Module C 
topic.publish('c'); 

回答

2

道場沒有內置在這樣的東西,但它是相當瑣碎建立的東西,你甚至可以再使用與你提到dojo/promise/all

function createTopicPromise(topicName) { 
    var dfd = new Deferred(); // dojo/Deferred 
    var handle = topic.subscribe(topicName, function (someValue) { 
     handle.remove(); 
     dfd.resolve(someValue); 
    }); 
    return dfd.promise; 
} 

all([ 
    createTopicPromise('a'), 
    createTopicPromise('b'), 
    createTopicPromise('c') 
]).then(function (values) { 
    // ... 
}); 

記住的pub/sub天然不排隊公佈的用戶 - 也就是,如果一個主題被之前的用戶被迷上了它出版,不公佈會完全被忽視。主題也可以多次發佈,而上面的方法只會在調用createTopicPromise之後收聽第一個發佈(因爲promise只能解析或拒絕一次)。