Store加载数据后,Ember启动服务



我有一个从存储中读取的服务。我创建了一个基本的初始化器来findAll数据来填充存储,然后在我启动服务之后。服务恰好使用存储,但是当服务访问存储时,存储中没有数据。如果我在应用程序加载后在服务中手动调用该函数,我就能够获得该值。我假设这是因为findAll的回调被放在事件队列上,并且我在事件队列删除存储填充事件之前运行服务。如果是这种情况,我如何告诉Ember在商店填充完毕后启动服务?

第一个初始化器(我让它先运行,带有'before')

export function initialize(application) {
  let store = application.__container__.lookup('service:store');
  store.findAll('my-data');
}

第二初始化

export function initialize(application) {
  let fSociety = application.__container__.lookup('service:service-FSociety');
  fSociety.start();
}

我也尝试使用run循环,但它似乎不起作用。

export function initialize(application) {
  let fSociety = application.__container__.lookup('service:service-FSociety');
  Ember.run.scheduleOnce('afterRender', this, function() {
    fSociety.start();
  }

}

简短的回答是你不能。

即使你使用初始化器的beforeafter属性来正确指定它们应该运行的顺序,它们仍然是异步的,并且它们不会等待前一个初始化器完成后才开始自己的工作。

我的建议是使用单个实例初始化器,并做如下操作:

export function initialize(application) {
  let store = application.__container__.lookup('service:store');
  let fSociety = application.__container__.lookup('service:service-FSociety');
  store.findAll('my-data').then(() => fSociety.start());
}

最新更新