How to assign data returned from $promise to global variable
angularjs, javascript, promise
Solution
You can't work with asynchronous code like you are attempting. `result` variable is simply not yet populated when you are trying to use it. Instead you should make `getMethod2` return promise too, and use its `then` method:
.factory('service2', function (dependencies...) {
var getMethod2 = function () {
return Service1.getMethod1();
};
// RUN METHOD
getMethod2().then(function(result) {
console.log(result);
});
});
You can also cache returned data:
.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);
});
});
Problem
I've two services, `service1 and service2`, and I would like to invoke a method of `service1` into `service2`. Ideally, I would like to assign the returned data from `service1.getMethod()` to a global variable declared as `var result = []`. Here is the code: service1 ``` .factory('service1', function (dependencies...) { var getMethod1 = function () { ...//making http get call return deferred.promise(); }; return { getMethod1 : getMethod1 }; }); ``` service2 ``` .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` }); ``` So ideally, I would like to use what's will be in `result` in `service2's` other `functions` `i.e. result[0].name` etc. Not sure if what I'm doing is the right approach. Please provide an `plunker demo or code snippet` example and if not sure about something, please write comment below. Thanks!