我想出去解决这个问题。当我在模型钩子里面进行ajax调用时,我希望(需要)从商店返回ajax调用和数据的结果,Ember只想从商店返回数据而不是等待结果ajax电话。这是代码:
value nonEmptyOpt is not a member of List[Int]
我完全意识到我异步做错了,而且它可能非常基本,我只是无法弄清楚是什么。我在Ember相对较新。我尝试过各种各样的方式 - 添加第二个'然后再尝试。到ajax调用,从ajax调用中创建一个函数,调用它,然后添加一个' .then'为此,将我的return语句放在.then块等等等。没有任何作用(所有这些解决方案都导致没有返回数据)。请帮忙!感谢。
答案 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
}
});
}
});