我正在使用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');
答案 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
后监听第一次发布(因为承诺只会解析或拒绝一次)。