为什么在ember.run.later安排的工作完成之前,ember.run调用完成?

时间:2016-06-03 23:36:05

标签: javascript ember.js

根据Ember.run的文档:

  

在RunLoop中运行传递的目标和方法,确保任何   刷新的延迟操作包括绑定和视图更新   结束。

所以我预计当我在测试中使用它时,如果测试中的代码是为了稍后使用Ember.run.later安排一些工作,它应该在Ember.run调用完成之前完成,但是看起来不是如此:

long long

结果是:

test('Ember.run waits for all scheduled actions to finish', function(assert) {
  assert.expect(2);
  var done = assert.async();
  let isRunLaterThingFinished = false;
  Ember.run(function() {
    Ember.run.later(function() {
      isRunLaterThingFinished = true;
      assert.ok(true, 'the scheduled thing happened');
      done();
    }, 1);
  });
  assert.ok(isRunLaterThingFinished, "scheduled actions should have happened by the time ember run finishes");
});

任何人都可以解释我在这里缺少的内容,以及如何让我的测试等待所有预定的方法在完成断言之前完成?

1 个答案:

答案 0 :(得分:2)

Ember.run.later将创建一个单独的运行循环。 您需要使用的是Ember.run.schedule

  Ember.run(function() {
    Ember.run.schedule('actions', this, function() {
      // The code goes here
    });
  });

这样,你的函数进入当前运行循环的actions队列,并在刷新队列时在循环结束之前执行。