Создание функции для ожидания события перед возвратом?

#javascript #events #function #return #wait

#javascript #Мероприятия #функция #Возврат #подождите

Вопрос:

 function myFunction() {
    wait(); //what I put there?
    return;
}

myFunction(); 

//this is an event; when its triggered I want function to resume
onSomething = function() {
    myFunction.resume(); //what I put there?
}
  

Это просто локальный опыт. Обратите внимание, что while(!resume) не будет работать, потому что это помешало бы событию onSomething произойти.

Комментарии:

1. Вы можете сделать это с помощью генераторов , но это не кроссбраузерно. Хотя это будет поставляться с ECMAScript 6…

Ответ №1:

Это невозможно.

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

Комментарии:

1. Это действительно невозможно на javascript, и я понял, что в этом тоже нет необходимости.

2. Вот ситуация, когда такая функция необходима: функция, которая фиксирует oncontextmenu событие и должна возвращать true или false на основе события мыши. Контекстное меню браузера не может быть запущено программно.

3. @automaton что вы имеете в виду под «на основе события мыши»? Когда произойдет это событие мыши, если пользователь в данный момент находится в контекстном меню?

Ответ №2:

Вы должны переключить свои мозги на мышление в событиях вместо «традиционного» потока программирования. Способ сделать это:

 function myFunctionPart1() {
    doSomething();
}

function myFunctionPart2() {
    doSomethingElse();
}

myFunctionPart1();

onSomething = function() {
    myFunctionPart2();
}
  

Ответ №3:

Итак, с генератором это выглядело бы так:

 function test() {
    // first part of function
    yield;
    // second part of function
    yield;
}

var gen = test(); // creating a generator

gen.next(); // execute first part

button.onclick = function () {
    gen.next(); // execute second part on button click
};
  

Живая демонстрация: http://jsfiddle.net/MQ9PT /

Однако это не работает за пределами Firefox. Это станет частью стандарта ECMAScript в следующей редакции…