Javascript очередь асинхронного выполнения и setTimeout? - PullRequest
1 голос
/ 03 декабря 2010

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

alert();//of course we can't use this one.

setTimeout(function(){
    someScript();//works, but are there vulnerabilites?
}, 1);

Какие существуют другие методы и как правильно выйти из очереди выполнения javascript?

Если setTimeout - лучший вариант, каковы уязвимости использования setTimeout? Возможны ли будущие проблемы, вероятность того, что код в тайм-ауте не будет вызван, проблемы со скоростью и т. Д.

Ответы [ 3 ]

3 голосов
/ 03 декабря 2010

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

Единственные уязвимости не в том, что вы делаете. Кодирование асинхронно немного сложнее, чем кодирование синхронизации. И вы должны следить за своим контекстом, потому что использование «this» не сработает:

object = {
    firstMethod: function(){
        setTimeout(function(){
            this.secondMethod(); // won't work!
        }, 30);
    },
    secondMethod: function(){}
}
1 голос
/ 03 декабря 2010

setTimeout - способ сделать это. Просто обратите внимание, что вторым параметром является время ожидания в миллисекундах , а не в секундах

1 голос
/ 03 декабря 2010

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

1ms в setTimeout() никогда не работает, однако с точки зрения фактического 1ms.Самый быстрый, который вы обычно можете получить, составляет около 10ms в моем опыте.

...