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
之后的第一次发布(因为承诺只解析或拒绝一次)。
我正在使用 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
之后的第一次发布(因为承诺只解析或拒绝一次)。