异步不按预期工作?

时间:2014-03-19 20:44:27

标签: javascript timeout polymer

我有一个聚合物元素,它通过“polymer-jsonp”从电子表格中获取数据。 数据到达后,我会更新元素的内容,并希望获得其显示的大小。

我希望在完全呈现图像和内容时调用异步。 (http://www.polymer-project.org/docs/polymer/polymer.html#asyncmethod

如下所示调用刷新似乎返回没有内部图像的div的大小。     ...          ...

researchChanged: function() {
        if(this.research){
          this.$.title.innerHTML = this.research.feed.entry[0].gsx$title.$t;

          // call refresh
          this.async(this.refresh);

        }
      }

延迟调用刷新似乎会返回预期的大小。

this.async(function() {
                this.refresh();
              }, null, 10);

这是预期的行为吗? 我们可以以某种方式最小化这种异步延迟吗?

由于

2 个答案:

答案 0 :(得分:1)

所有async都会等到JavaScript产生线程。无法保证完成任何特定的其他异步任务。

例如,无论何时创建<img>元素,当该图片完全加载时都是不确定的(因为浏览器可能必须通过网络加载像素)。您必须聆听元素的onload事件才能确定。

现在,有时我们会讨论微任务async方法和微任务一起使用。考虑微任务的简单方法是在async动作发生之前完成的所有事情。

例如,如果您调用async,则可以确保在执行异步方法之前将发生所有数据传播(由于绑定和观察者)。突变观察者和未决事件也都在一个微任务中解决。

答案 1 :(得分:0)

您使用的是任何聚合物布局吗? 在我的情况下,我必须听一个布局事件(聚合物布局,聚合物网格布局),布局完成后会触发