angular.module('starter.services', [])
.factory('Services', function ($http,$q) {
var def = $q.defer();
// Might use a resource here that returns a JSON array
$http.get('JSONFILE').then(function (data) {
def.resolve(data.data);
});
this.result ={};
var var1 = def.promise;
var1.then(function (data){
this.result = data;
console.log(this.result);
});
// Some fake testing data
console.log(this.result);
return {
all: function () {
return var1;
},
remove: function (service) {
var1.splice(var1.indexOf(service), 1);
},
get: function (serviceId) {
for (var i = 0; i < var1.length; i++) {
if (var1[i].id === parseInt(serviceId)) {
return var1[i];
}
}
return null;
}
};
});
this.result将在promise之外返回空对象。然后在其中获取正确的数据。
答案 0 :(得分:0)
实际上,如果你在这里谈论这个日志声明:
// Some fake testing data
console.log(this.result);
this.result
没有相同数据的原因是因为Promise
可能仍在等待(履行承诺)。
我怀疑当你看到这些console
日志时,你会先看到在外面的Promise显示。这是可以预期的。
此外,您的块范围不同,这意味着this.result
在Promise上下文中可能不同。
尝试更改:
this.result = {};
为:
var result = {};
并且还要改变
var1.then(function (data){
result = data;
console.log(result);
});