Ember模型钩子不等待返回ajax调用的结果

时间:2016-08-25 15:16:30

标签: jquery ajax asynchronous ember.js

我想出去解决这个问题。当我在模型钩子里面进行ajax调用时,我希望(需要)从商店返回ajax调用和数据的结果,Ember只想从商店返回数据而不是等待结果ajax电话。这是代码:

value nonEmptyOpt is not a member of List[Int]

我完全意识到我异步做错了,而且它可能非常基本,我只是无法弄清楚是什么。我在Ember相对较新。我尝试过各种各样的方式 - 添加第二个'然后再尝试。到ajax调用,从ajax调用中创建一个函数,调用它,然后添加一个' .then'为此,将我的return语句放在.then块等等等。没有任何作用(所有这些解决方案都导致没有返回数据)。请帮忙!感谢。

2 个答案:

答案 0 :(得分:1)

基本上你只需要回复一个承诺。一个很好的解决方法是使用RSVP.hash

return Ember.RSVP.hash({ // hash waits for all promises and returns an object with the results.
  ajaxData: ajax(...), // assume that ajax returns a promise
  emberDataObj1: this.store.find(...), // another promise
});

答案 1 :(得分:0)

model挂钩将等待承诺得到解决。你应该返回Promise或ajax call

import Ember from 'ember';
const { RSVP } = Ember;

export default Ember.Route.extend({
    model: function() {
        var user = this.modelFor('application').user;
        var org_id = user.get('org').get('id');
        var current_org = this.store.peekRecord('org', org_id);        
        var redAppsRiskTotal = 0;
        var amberAppsRiskTotal = 0;
        var greenAppsRiskTotal = 0;        
        return RSVP.resolve($.get(this.modelFor('application').url + '/orgs/' + org_id + '/apps.json?auth_token=' + user.get('auth'))).then((result) => {
            var greenRisk = current_org.get('greenRiskThreshold');
            var redRisk = current_org.get('redRiskThreshold');
            result.forEach(function(app) {
                if (app.total_risk_score < greenRisk) { greenAppsRiskTotal += 1; } 
                else if (app.total_risk_score < redRisk) { amberAppsRiskTotal += 1; } 
                else { redAppsRiskTotal += 1; }
            });            
            return {
                'current_org': current_org,
                'redAppsTotal': redAppsRiskTotal, // but this only returns the current_org
                'amberAppsTotal': amberAppsRiskTotal, // the others are zero
                'greenAppsTotal': greenAppsRiskTotal
            }
        });
    }    
});