#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 в следующей редакции…