JavaScript прослушивает когда функция вызывается внутри объекта - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть функция, которая возвращает обещание, которое разрешается для объекта.

Я хочу, чтобы у этого объекта было событие, которое я могу слушать каждый раз, когда это событие вызывается изнутри.

Используя psudeo-код, это выглядело бы так:

// 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 голосов
/ 28 сентября 2018

Проблема в том, что вы устанавливаете слушателя после вещателя.В идеале, слушатель должен быть создан до того, как будет создан вещатель, чтобы слушатель мог прослушивать каждую трансляцию.

В любом случае, подход может использовать внешний объект в качестве держателя события, так что слушатель создается первым.

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...