如何将从$ promise返回的数据分配给全局变量

时间:2014-11-27 20:06:45

标签: javascript angularjs promise

我有两项服务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中的内容。不确定我是什么&#39 ;做的是正确的方法。

请提供plunker demo or code snippet示例,如果不确定,请在下面写下评论。

谢谢!

1 个答案:

答案 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);
    });
});