Ember.js 带有承诺的Ember模型钩子。全部和几个findAll()
我想我明白商店是如何运作的。芬德尔和承诺。一切都是有效的。但我遇到了一些奇怪的行为。 我有两个findAll(),但只有一个在承诺后被填满。所有的都进入then()-部分 请参阅此代码Ember.js 带有承诺的Ember模型钩子。全部和几个findAll(),ember.js,promise,ember-data,json-api,Ember.js,Promise,Ember Data,Json Api,我想我明白商店是如何运作的。芬德尔和承诺。一切都是有效的。但我遇到了一些奇怪的行为。 我有两个findAll(),但只有一个在承诺后被填满。所有的都进入then()-部分 请参阅此代码 export default Route.extend({ model() { var self = this; return Ember.RSVP.Promise.all([ self.store.findAll('contact'), self.store.fi
export default Route.extend({
model() {
var self = this;
return Ember.RSVP.Promise.all([
self.store.findAll('contact'),
self.store.findAll('message')
]).then(function(values) {
var contacts = values[0];
var messages = values[1];
var numberOfContacts = contacts.get('length'); // This is 39 as expected.
var numberOfMessages = messages.get('length'); // This is 0. Expected is 1.
...
信息和联系人肯定有不同之处,但我不知道是什么。他们有非常相似的模型和非常相似的后端API处理。从网络流量中,我可以看到返回了一个消息对象,如果我调用(稍后在代码中,在模型挂钩之后):
我得到了预期的消息对象
我使用了ember 3.0.0,我找到了答案。这是由于余烬中findAll()的一个奇怪行为造成的。 FindAll()将立即返回存储中已经存在的元素。稍后,当从服务器检索到更多对象时,存储将被更新,但findAll()调用的承诺早已不复存在 为了解决这种奇怪的行为,findAll()方法有一个选项 它是这样使用的:
return self.store.findAll('message', { reload: true }).then(messages => {
var messageLength = messages.get('length');
...
有了这个重新加载选项集,findAll()和promissions就可以像预期的那样工作。我相信这将对将来的人有所帮助。
{reload: true}
return self.store.findAll('message', { reload: true }).then(messages => {
var messageLength = messages.get('length');
...