2015-07-24 26 views
4

Иногда я ошибаюсь в кодировании своего веб-приложения и материала для вашего полимера 1.0, которое перестает работать должным образом. Подобно настройке данных на какой-то пользовательский элемент, а затем сразу же пытается прочитать некоторые данные из него (это зависит от только что установленных данных) (потому что я не знаю лучше). Иногда это не работает. Большую часть времени this.async поможет мне, но иногда этого не будет. Тем не менее, setTimeout никогда не подводил меня в таких ситуациях. Большую часть времени вызов setTimeout без предоставления времени ожидания будет работать так же хорошо.setTimeout не совпадает с this.async?

Долгое время я думал, что this.async(function(){...}) - это то же самое, что и setTimeout(function(){...}). Потому что иногда код внутри this.async не сможет увидеть изменения в данных пользовательского элемента, в то время как код внутри setTimeout не будет.

Эти два метода реализованы по-разному?

ответ

6

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

С documentation из this.async:

Если не указано время ожидания, выполняют задачи с временем microtask (после того, как текущий метод заканчивается, но до следующего события из очереди событий обрабатываются)

setTimeout, с другой стороны, добавит вашу функцию в конец очереди, как описано в разделе «Добавление сообщений» этого article.

Вызов setTimeout добавит сообщение в очередь по истечении времени, прошедшего в качестве второго аргумента. Если в очереди нет другого сообщения, сообщение обрабатывается сразу; однако, если есть сообщения, сообщение setTimeout должно будет ожидать обработки других сообщений. По этой причине второй аргумент указывает минимальное время и не гарантированное время

Смежные вопросы