我有两个服务service1 and service2
,我想将service1
的方法调用到service2
中。
理想情况下,我想将service1.getMethod()
中返回的数据分配给声明为var result = []
的全局变量。
这是代码:
服务1
.factory('service1', function (dependencies...) {
var getMethod1 = function () {
...//making http get call
return deferred.promise();
};
return {
getMethod1 : getMethod1
};
});
服务2
.factory('service2', function (dependencies...) {
var result = [];
var getMethod2 = function () {
Service1.getMethod1().then(function (data) {
result = data;
});
//RUN METHOD
getMethod2();
//Here ideally, I would like result to contain `[object, object, object]`
console.log(result); //instead it prints `undefined`
});
因此,理想情况下,我想使用
result
中的service2's
中的内容,其他functions
中的i.e. result[0].name
等中的内容。不确定我在做什么是正确的方法。请提供
plunker demo or code snippet
示例,如果不确定,请在下面写评论。谢谢!
最佳答案
您不能像尝试那样使用异步代码。尝试使用result
变量时,它尚未完全填充。相反,您也应该使getMethod2
返回promise,并使用其then
方法:
.factory('service2', function (dependencies...) {
var getMethod2 = function () {
return Service1.getMethod1();
};
// RUN METHOD
getMethod2().then(function(result) {
console.log(result);
});
});
您还可以缓存返回的数据:
.factory('service2', function (dependencies...) {
var result;
var getMethod2 = function () {
return result ? $q.when(result) : Service1.getMethod1().then(function(data) {
result = data;
return result;
});
};
// RUN METHOD
getMethod2().then(function(result) {
console.log(result);
});
});