Polymer 聚合物:何时使用异步?

Polymer 聚合物:何时使用异步?,polymer,Polymer,聚合物中的async方法的目的是什么?我应该什么时候用 现在我正在使用它,就像嗯,这个bug有点奇怪,也许async会修复它是的,id做了是的。它没有给我任何对我的代码的信心,因为我正在喷洒async,就在一些计时错误出现的时候。根据您使用的是Polymer 0.5还是1.0,这里的答案略有不同。在1.0中,更多的操作是同步的,因此您可能看不到对异步的需求 让我们从0.5开始。大多数情况都与更改属性的效果有关。观察数据绑定或观察者中使用的属性的更改。当你改变其中一个的时候 属性,则该更改的任何副

聚合物中的
async
方法的目的是什么?我应该什么时候用


现在我正在使用它,就像嗯,这个bug有点奇怪,也许async会修复它是的,id做了是的。它没有给我任何对我的代码的信心,因为我正在喷洒
async
,就在一些计时错误出现的时候。

根据您使用的是Polymer 0.5还是1.0,这里的答案略有不同。在1.0中,更多的操作是同步的,因此您可能看不到对异步的需求

让我们从0.5开始。大多数情况都与更改属性的效果有关。观察数据绑定或观察者中使用的属性的更改。当你改变其中一个的时候 属性,则该更改的任何副作用都会以异步方式发生,并带有微任务计时。这意味着工作发生在当前事件处理程序返回之后,但在处理下一个事件之前

换句话说,如果我有这样的数据绑定:

<div id="output">{{someProperty}}</div>
这正是异步性让你头疼的地方。如果希望更新绑定的数据,则需要给数据绑定系统一个工作的机会。如果将
console.log
语句移动到异步中,以便稍后执行,则会得到预期的响应:

this.async(function() {
  console.log(this.$.output.textContent); // logs "New Value"
});
大多数时候,您不需要戳数据绑定的DOM元素。但是如果您这样做了,或者您正在等待观察者的副作用,那么您可能需要异步

在Polymer 1.0中,数据绑定和单一属性观察者是同步的。多属性观察者和对象是异步的


(虽然API不同于JavaScript,但这篇关于事件循环的Dart文章是我发现的描述事件循环和微任务队列的最佳文章:)

很棒的Dart链接!Mircrotask队列对我来说是一个谜-这将使它变得清晰。
this.async(function() {
  console.log(this.$.output.textContent); // logs "New Value"
});