【发布时间】:2015-06-12 00:19:54
【问题描述】:
对于特定的服务调用,我使用的是 jQuery 而不是 ember 数据:
return Ember.$.get(url).then((json) => {
this.store.pushPayload('user', json);
return this.store.getById('user', json.user.id);
});
这会破坏 ember 的测试:
未捕获的错误:断言失败:您已打开测试模式,这禁用了运行循环的自动运行。 您需要在运行中包装任何具有异步副作用的代码
我可以通过在我的 promise 的 .then 函数中添加一个 run 来解决这个问题:
return Ember.$.get(url).then((json) => {
Ember.run(() => {
this.store.pushPayload('user', json);
return this.store.getById('user', json.user.id);
})
});
但这对我不起作用,因为 Ember.run(..) 不返回任何内容,所以我的承诺解析为未定义。我已经看到了一些将 Ember.run 移出一级的建议,以便它包装返回承诺的方法。这将返回正确的值,但测试将继续失败。
在不破坏测试的情况下,返回解析为值的 Promise 的正确方法是什么?
谢谢!
编辑 1
我确实可以使用此代码:
var self = this;
return Ember.$.get(url).then((json) => {
return new Ember.RSVP.Promise(function(resolve, reject) {
Ember.run(function() {
self.store.pushPayload('user', json);
var user = self.store.getById('user', json.user.id);
debugger;
resolve(user);
});
});
});
这是正确的做法吗?感觉就像做一个 ajax 调用增加了很多复杂性。
【问题讨论】:
标签: ember.js promise ember-cli