Вопрос по jquery, multithreading, oop, javascript – Может ли выполнение функции JavaScript быть прервано?

2

Наличие объекта для хранения данных.

<code>var store = {
    elements: [],
    eventsEnabled: true,
    addElement: function(element) {
        this.elements.push(element);
        if (this.eventsEnabled) {
            // Code that triggers event, calls handlers... whatever
        }
    }
};
</code>

Акт хранения данных происходит от двух событий (вид двух производителей). Первый «продюсер» не вызывает никакого события:

<code>setInterval(function() {
    store.eventsEnabled = false;
    store.addElement('hello');
    store.eventsEnabled = true;
}, 12000);
</code>

Второй вызывает события:

<code>setInterval(function() {
    store.addElement('bye');
}, 7000);
</code>

Вопрос в том, может ли второй производитель нарушить поток выполнения первого производителя?

Я имею в виду, что если производитель 1 отключает события и, прежде чем завершить выполнение (и, следовательно, до того, как события снова будут включены), производитель 2 начинает свое выполнение и добавляет свой элемент, то никакие события не будут инициированы. Это возможно? Это может случиться?

Если так, как этот код может быть преобразован в многопоточный?

Ваш Ответ

3   ответа
0

вы также можете посмотреть на передачу функции события:

var store = {
    elements: [],
    addElement: function(element, callback) {
        this.elements.push(element);
        if (callback !== undefined) {
            callback();
            // Common code that triggers event, calls handlers... whatever
            alert("I'm Common Event Code");
        }
    }
};​

Используется как таковой:

setInterval(function() {
    store.addElement('hello', function(){ alert("I'm Special Event Code!"); });
}, 12000);

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

4

eventsEnabled в качестве параметра кaddElement метод?

var store = {
    elements: [],
    addElement: function(element,eventsEnabled) {
        this.elements.push(element);
        if (eventsEnabled) {
            // Code that triggers event, calls handlers... whatever
        }
    }
};

Первый:

setInterval(function() {
    store.addElement('hello',false);
}, 12000);

Во-вторых:

setInterval(function() {
    store.addElement('bye',true);
}, 12000);
Error: User Rate Limit Exceeded German Latorre
Error: User Rate Limit Exceeded
3

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

(Однако, если функция выполняет асинхронный вызов, другие функции могут выполняться до начала асинхронной операции. Однако в вашем коде этого не происходит, что я вижу, кромеsetTimeout звонки, и вы можете быть уверены, что они будут выполняться в правильном порядке.)

Похожие вопросы