Dojo的发布/订阅 - 如何订阅多个主题
问题描述:
我正在使用DOJO 1.10.4,我需要在主题a,b,c
广播后运行方法。类似的承诺dojo/promise/all
。Dojo的发布/订阅 - 如何订阅多个主题
DOJO是否有此功能,任何想法如何解决?
Module A
topic.publish('a');
Module B
topic.publish('b');
Module C
topic.publish('c');
答
道场没有内置在这样的东西,但它是相当琐碎建立的东西,你甚至可以再使用与你提到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只能解析或拒绝一次)。