Dojo的发布/订阅 - 如何订阅多个主题

时间:2015-10-06 07:28:03

标签: javascript dojo publish-subscribe

我正在使用DOJO 1.10.4,我需要在广播主题a,b,c之后运行一个方法。与承诺dojo/promise/all类似的东西。

DOJO是否有这个功能,知道如何解决它?

Module A
topic.publish('a');

Module B
topic.publish('b');

Module C
topic.publish('c');

1 个答案:

答案 0 :(得分:2)

Dojo没有为此内置任何东西,但是构建一些你甚至可以使用与你提到的 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后监听第一次发布(因为承诺只会解析或拒绝一次)。