gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:33:41 27 4
gpt4 key购买 nike

根据 Ember.run 的文档它:

Runs the passed target and method inside of a RunLoop, ensuring any deferred actions including bindings and views updates are flushed at the end.

所以我期望当我在测试中使用它时,如果被测试的代码要安排一些工作以便稍后使用 Ember.run.later它应该在 Ember.run 调用完成之前完成,但事实似乎并非如此:

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");
});

结果是:

Ember.run waits for all scheduled actions to finish 
1. scheduled actions should have happened by the time ember run finishes
Expected: true
Result: false

任何人都可以解释一下我在这里缺少什么,以及如何让我的测试等待所有预定方法完成后再进行断言?

最佳答案

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

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

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

关于javascript - 为什么 ember.run 调用在 ember.run.later 安排的工作完成之前完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37624885/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com