Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 余烬模型挂钩赢得';不要等待返回ajax调用的结果_Jquery_Ajax_Asynchronous_Ember.js - Fatal编程技术网

Jquery 余烬模型挂钩赢得';不要等待返回ajax调用的结果

Jquery 余烬模型挂钩赢得';不要等待返回ajax调用的结果,jquery,ajax,asynchronous,ember.js,Jquery,Ajax,Asynchronous,Ember.js,我想弄清楚这件事,真是疯了。当我在模型钩子中进行ajax调用时,我希望(需要)返回ajax调用的结果和存储中的数据,Ember只希望从存储中返回数据,而不是等待ajax调用的结果。代码如下: model: function() { var user = this.modelFor('application').user; var org_id = user.get('org').get('id'); var current_org = this.s

我想弄清楚这件事,真是疯了。当我在模型钩子中进行ajax调用时,我希望(需要)返回ajax调用的结果和存储中的数据,Ember只希望从存储中返回数据,而不是等待ajax调用的结果。代码如下:

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 _this = this;
        var redAppsRiskTotal = 0;
        var amberAppsRiskTotal = 0;
        var greenAppsRiskTotal = 0;

        ajax({
            url: _this.modelFor('application').url + '/orgs/' + org_id + '/apps.json?auth_token=' + user.get('auth'),
            type: 'get'
        }).then(function(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; }
            });

            console.log(current_org.get('businessLineCount')); // these all display the correct result non-zero results
            console.log(redAppsRiskTotal);
            console.log(amberAppsRiskTotal);
            console.log(greenAppsRiskTotal);
        });

        return { current_org, redAppsTotal: redAppsRiskTotal, // but this only returns the current_org
                                                    amberAppsTotal: amberAppsRiskTotal, // the others are zero
                                                    greenAppsTotal: greenAppsRiskTotal };
    }
模型:函数(){
var user=this.modelFor('application').user;
var org_id=user.get('org').get('id');
var current\u org=this.store.peekRecord('org',org\u id);
var_this=这个;
var redAppsRiskTotal=0;
var amberAppsRiskTotal=0;
变量greenAppsRiskTotal=0;
阿贾克斯({
url:_this.modelFor('application').url+'/orgs/'+org_id+'/apps.json?auth_token='+user.get('auth'),
键入:“获取”
}).然后(函数(结果){
var greenRisk=当前组织获取(“greenRiskThreshold”);
var redRisk=当前组织获取('redriskstorm');
结果.forEach(函数(应用程序){
如果(app.total_risk_score

我完全知道我在异步地做错事,这可能是非常基本的,我只是不知道是什么。我在恩伯相对来说是新来的。我已经尝试了各种方法——在ajax调用中添加第二个“.then”,在ajax调用中创建一个函数,调用它,然后添加“.then”,然后将我的返回语句放在.then块中,等等。没有任何效果(所有这些解决方案都会导致没有返回数据)。请帮忙!谢谢。

基本上你只需要回报一个承诺。使用
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
});

model
hook将等待承诺得到解决。您应该返回
Promise
或ajax调用

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
            }
        });
    }    
});
从“余烬”导入余烬;
const{RSVP}=Ember;
导出默认的Ember.Route.extend({
模型:函数(){
var user=this.modelFor('application').user;
var org_id=user.get('org').get('id');
var current\u org=this.store.peekRecord('org',org\u id);
var redAppsRiskTotal=0;
var amberAppsRiskTotal=0;
变量greenAppsRiskTotal=0;
返回RSVP.resolve($.get(this.modelFor('application').url+'/orgs/'+org\u id+'/apps.json?auth\u token='+user.get('auth')))。然后((结果)=>{
var greenRisk=当前组织获取(“greenRiskThreshold”);
var redRisk=当前组织获取('redriskstorm');
结果.forEach(函数(应用程序){
如果(app.total_risk_score
return语句应该包含异步调用,然后model hook将等待Promise解决,非常感谢。就是这样:-)
$.get
将返回一些可以通过
承诺解决的问题。resolve($.get(…)
,不需要
新承诺(…)
@Lux-谢谢。我来这里是为了通过为他人做/说我所知道的来学习。所以请在我接下来的回答中指出我的错误。。非常感谢。所以我要删除我的答案。。我可以吗?你可以保留它,也许可以改成使用
Promise.resolve