Полимер: когда использовать асинхронный?

Какова цель async метод в полимере? Когда я должен использовать это?

Прямо сейчас я использую это как hm-this-bug-is-своего рода-странно-возможно-async-будет-исправить-это-yep-id-did-yey. Это не дает мне уверенности в моем коде, так как я кроплю async только когда появляется какая-то временная ошибка.

1 ответ

Решение

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

Давайте начнем с 0,5. Большинство случаев связано с эффектами изменения свойств. Свойства, используемые в привязках данных или наблюдателях, наблюдаются за изменениями. Когда вы изменяете одно из этих свойств, любые побочные эффекты этого изменения происходят асинхронно с синхронизацией между микрозадачами. Это означает, что работа происходит после возврата текущего обработчика события, но до обработки следующего события.

Другими словами, если у меня есть привязка данных, как это:

<div id="output">{{someProperty}}</div>

Предположим, у меня есть следующий код:

this.someProperty = "New Value";
console.log(this.$.output.textContent); // logs "Old Value"

Это где асинхронность кусает вас. Если вы хотите, чтобы связанные данные обновлялись, вам нужно дать системе привязки данных возможность работать. Если вы переместите это console.log оператор в асинхронном режиме, поэтому он выполняется позже, вы получите ожидаемый ответ:

this.async(function() {
  console.log(this.$.output.textContent); // logs "New Value"
});

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

В Polymer 1.0 привязка данных и наблюдатели с одним свойством являются синхронными. Наблюдатели с несколькими свойствами и некоторые операции DOM являются асинхронными.

(Хотя API отличаются от JavaScript, эта статья Dart о цикле событий - лучшая, которую я нашел для описания цикла событий и очереди микрозадач: https://www.dartlang.org/articles/event-loop/)

Другие вопросы по тегам