我有两项服务service1 and service2
,我想在service1
中调用service2
的方法。
理想情况下,我想将service1.getMethod()
的返回数据分配给声明为var result = []
的全局变量。
以下是代码:
.factory('service1', function (dependencies...) {
var getMethod1 = function () {
...//making http get call
return deferred.promise();
};
return {
getMethod1 : getMethod1
};
});
.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
中的内容。不确定我是什么&#39 ;做的是正确的方法。
请提供plunker demo or code snippet
示例,如果不确定,请在下面写下评论。
谢谢!
答案 0 :(得分:5)
您无法像尝试一样使用异步代码。当您尝试使用它时,尚未填充result
变量。相反,您也应该getMethod2
返回承诺,并使用其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);
});
});