【问题标题】:Dojo's publish/subscribe - How to subscribe to multiple topicsDojo 的发布/订阅 - 如何订阅多个主题
【发布时间】:2015-10-06 07:28:03
【问题描述】:
我使用的是DOJO 1.10.4,我需要在主题a,b,c广播后运行一个方法。类似于 promise dojo/promise/all。
DOJO有这个功能吗,知道怎么解决吗?
Module A
topic.publish('a');
Module B
topic.publish('b');
Module C
topic.publish('c');
【问题讨论】:
标签:
javascript
dojo
publish-subscribe
【解决方案1】:
Dojo 没有为此内置任何东西,但是构建一些您甚至可以使用 with 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) {
// ...
});
请记住,发布/订阅本质上不会为订阅者排队发布 - 也就是说,如果主题在订阅者连接之前发布,则该发布将完全被忽视。主题也可以发布多次,而上面的方法只监听调用createTopicPromise 之后的第一次发布(因为承诺只解决或拒绝一次)。