Dojo 的 publish/subscribe - 如何订阅多个主题

Dojo's publish/subscribe - How to subscribe to multiple topics

我正在使用 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');

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) {
    // ...
});

请记住,pub/sub 本质上不会为订阅者排队发布 - 也就是说,如果主题在订阅者连接之前发布,则该发布将完全被忽视。主题也可以多次发布,而上面的方法只监听调用 createTopicPromise 之后的第一次发布(因为承诺只解析或拒绝一次)。