当在对象内部调用函数时,JavaScript会监听

时间:2018-09-28 06:03:34

标签: javascript function object

我有一个函数,该函数返回可解析为对象的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。在现实生活中还有其他方法吗?

1 个答案:

答案 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时想到的唯一方法。