2015-10-06 168 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只能解析或拒绝一次)。