在这种情况下如何使$ q.all工作?

时间:2015-07-24 04:52:06

标签: javascript angularjs

我正在尝试在下面的代码中使用$ q.all。但我认为我误解了一些关键的想法,因为它没有像我预期的那样工作。如果有人能给我一些非常感激的指示。

问题出在$q.all(toSend.pie.slices).then()

var someData = {...};
var toSend = {
    pie: {
        slices: []
    }
};

toSend.pie.slices = generatePieSlice(someData);


$q.all(toSend.pie.slices).then(function(data){
    if(data) {      
        console.log(data);  // this is undefined :(        
        //do something else
    }
});  



function generatePieSlice(data) {
    var arr = [];
    if(data) {
        angular.forEach(data, function(resp_o, resp_n){
            arr.push({
                name: resp_o.display,
                marketValue: resp_o.value,
                percentage: resp_o.percentage,
                key: resp_n
            });
        });
    }
    $q.all(arr).then(function(data) {
        if(data) {
            console.log(data); // this gives me with the correct data
            return data;
        }
    });

}

1 个答案:

答案 0 :(得分:-3)

感谢所有评论者和#39;救命。对于其他感兴趣的人来说,这是我最终的解决方案:)

var someData = {...};
var toSend = {
    pie: {
        slices: []
    }
};


$q.all({

    pieSlices: generatePieSlice(someData)

}).then(function(data){

    if(data) {      
        toSend = {
            pie: {
                slices: data.pieSlices
            }
        };

        // deferred.resolve(toSend) or something else :)
    }

});  


function generatePieSlice(response) {
    var arr = [];
    if(response) {
        angular.forEach(data, function(resp_o, resp_n){
            arr.push({
                name: resp_o.display,
                marketValue: resp_o.value,
                percentage: resp_o.percentage,
                key: resp_n
            });
        });
    }                
    return arr;
}