Javascript Ember.js中的同步数据调用

Javascript Ember.js中的同步数据调用,javascript,ember.js,synchronization,ember-data,Javascript,Ember.js,Synchronization,Ember Data,我在访问评论/节目时尝试执行以下操作(/reviews/:id): 从服务器加载两个模型:一个review和一个user 我只能访问review的id,因此我需要首先加载它,以获取用户id 然后,当加载完成并且我现在有了userId时,使用review中的userId属性查询user 最后,在散列中返回这两个,以便我可以在模板中使用它们 因此需要两个同步数据库查询,然后在路由的模型钩子中同时返回它们 我不介意它是否慢,它现在足够快,我需要它现在工作 这是我尝试过的,但不起作用: 评论/sho

我在访问评论/节目时尝试执行以下操作(
/reviews/:id
):

  • 从服务器加载两个模型:一个
    review
    和一个
    user
  • 我只能访问
    review
    的id,因此我需要首先加载它,以获取
    用户id
  • 然后,当加载完成并且我现在有了
    userId
    时,使用
    review
    中的
    userId
    属性查询
    user
  • 最后,在散列中返回这两个,以便我可以在模板中使用它们
因此需要两个同步数据库查询,然后在路由的
模型
钩子中同时返回它们

我不介意它是否慢,它现在足够快,我需要它现在工作

这是我尝试过的,但不起作用:

评论/show.js

export default Ember.Route.extend({
  model: function(params) {
    var user;
    var review = this.store.findRecord('review', params.id).then(
      function(result) {
        user = this.store.findRecord('user', result.get('userId'));
      }
    );

    return Ember.RSVP.hash({
      review: review,
      user: user
    });
  }
});
您可以这样做:

export default Ember.Route.extend({
  model: function(params) {
    var reviewPromise = this.store.findRecord('review', params.id);
    return Ember.RSVP.hash({
      review: reviewPromise,
      user: reviewPromise.then(review => {
        return this.store.findRecord('user', review.get('userId'));
      })
    });
  }
});

用户
未定义
的原因是,在审核解决之前,您的第一个承诺中没有分配该用户,但Ember.RSVP.hash已将
用户
作为
未定义
收到。谢谢你的回答。当您完全按照发布的方式运行代码时,会出现错误
无法读取未定义的属性“store”。。因为此
的上下文在承诺内发生了变化。可以通过将此
保存到
model()
范围内的变量来修复此问题。但你的想法完全正确。我编辑了答案,这样它就有了工作代码(PS,我只编辑了你关于友善的评论,所以我的编辑中至少有10个字符,对不起,哈哈)@Marcprins当你使用箭头功能时,上下文不会改变。确保您没有键入有趣的
函数。。这是ES6吗?@Marcprins是的,看看这些,当你使用ember Clip时,所有这些都是有效的。顺便说一句,你在做链式数据调用。同步ajax调用阻止javascript执行任何操作。