我正在尝试将MotorRestangular.all('Motors').getList()
的响应分配给变量a
,以便稍后使用。问题是,如果我尝试访问a
函数中的return
,则它是未定义的。我知道这不是完成我需要的正确方法,但我不知道如何做到这一点。
myApp.factory('Configurations', function(Restangular, MotorRestangular) {
var a;
var Motors = function() {
MotorRestangular.all('Motors').getList().then(function(Motors){
a = Motors;
});
}
return {
config: function(){
Motors();
console.log(a);
var g = _.groupBy(Motors, 'configuration');
console.log(g);
var mapped = _.map(g, function(m) {
return {
id: m[0].configuration,
configuration: m[0].configuration,
sizes: _.map(m, function(a) {return a.sizeMm})
}});
}
}
});
答案 0 :(得分:6)
请不要使用延迟对象。如果你在your answer中所做的工作 - 那么这也会有效:
myApp.factory('Configurations', function (Restangular, MotorRestangular, $q) {
var getConfigurations = function () {
return MotorRestangular.all('Motors').getList().then(function (Motors) {
//Group by Cofig
var g = _.groupBy(Motors, 'configuration');
//Map values
return _.map(g, function (m) {
return {
id: m[0].configuration,
configuration: m[0].configuration,
sizes: _.map(m, function (a) {
return a.sizeMm
})
}
});
});
};
return {
config: getConfigurations()
}
});
此外,如果发生错误,则返回的承诺不会永久保留。
答案 1 :(得分:1)
我刚刚解决了这个问题。发生的事情是config:
在填充a
之前返回。以下代码有效。
myApp.factory('Configurations', function(Restangular, MotorRestangular, $q) {
var getConfigurations = function(){
var deferred = $q.defer();
MotorRestangular.all('Motors').getList().then(function(Motors){
//Group by Cofig
var g = _.groupBy(Motors, 'configuration');
//Map values
var mapped = _.map(g, function(m) {
return {
id: m[0].configuration,
configuration: m[0].configuration,
sizes: _.map(m, function(a) {return a.sizeMm})
}});
deferred.resolve(mapped);
});
return deferred.promise;
};
return {
config: getConfigurations()
}
});