我有一个函数,该函数返回可解析为对象的promise。
我希望此对象有一个事件,每次在内部调用此事件时,我都可以收听。
使用伪代码,如下所示:
// function that returns the promise
function myFunction(){
return new Promise(function(resolve, reject) {
var obj = {};
obj.running = event; // this is a fake line of code
setInterval(function(){
obj.running // this should trigger
}, 3000); // something that can be listened to
resolve(obj);
});
}
// function that can listen to the event
myFunction().then(function(obj){
obj.event(){ // Fake event listener
alert("the set interval function from the code above just ran")
}
})
我认为用真实代码执行此操作的唯一方法是使用内部setInterval方法触发时调用的函数来原型化已解析的对象。
但是,我希望这样做而不需要使用原型来简化功能API。在现实生活中还有其他方法吗?
答案 0 :(得分:0)
问题是您要在广播器之后 设置监听器。理想情况下,应该在创建广播者之前创建侦听器,以便侦听器可以收听每个广播。
无论如何,一种方法可能是使用外部对象作为事件的持有者,以便首先创建侦听器。
var object = {
running: function(){ }
};
// function that returns the promise
function myFunction(object){
return new Promise(function(resolve, reject) {
setInterval(function(){
object.running(); // this should trigger
}, 3000); // something that can be listened to
});
}
// function that can listen to the event
myFunction(object).then(function(response){
object.running = function() {
//do stuff here;
};
});
这个想法是创建一个包含伪函数的对象,然后在诺言解决后更改该函数。我了解这似乎不是最好的解决方案,但这是我在使用普通javascript时想到的唯一方法。