我有两个服务,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);
});
});
关于javascript - 如何将 $promise 返回的数据分配给全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27178065/