setTimeout和this.async不一样?

时间:2015-07-24 08:56:55

标签: polymer polymer-1.0

有时我的编码方式错误,我的聚合物1.0网络应用程序和东西停止正常工作。就像将数据设置为某个自定义元素,然后立即尝试从中读取一些数据(这取决于刚刚设置的数据)(因为我不知道更好)。有时这不起作用。大多数时候this.async会帮助我,但有时却不会。但是,setTimeout在这种情况下从未让我失望过。大多数时候在没有提供等待时间的情况下调用setTimeout也会起作用。

很长一段时间以来,我认为this.async(function(){...})setTimeout(function(){...})相同。因为this.async中的代码有时会无法看到自定义元素数据中的更改,而setTimeout中的代码则不会。

这两种方法是否以不同的方式实施?

1 个答案:

答案 0 :(得分:7)

this.async将您的函数添加到事件队列的开头,而setTimeout将其添加到结尾。如果您使用setTimeout,则在调用函数之前可能已执行其他函数,从而导致您在数据中看到的更改。

来自this.async的{​​{3}}:

  

如果没有指定等待时间,则运行具有微任务计时的任务(在当前方法完成之后,但在处理事件队列中的下一个事件之前

另一方面,

setTimeout会将您的函数添加到队列的末尾,如documentation的“添加消息”部分所述。

  

调用setTimeout将在作为第二个参数传递的时间后向队列添加消息。如果队列中没有其他消息,则立即处理该消息;但是,如果有消息,则setTimeout消息必须等待处理其他消息。因此,第二个参数表示最短时间而不是保证时间