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

标签 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等。不确定我在做什么是正确的方法。

请提供 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/

相关文章:

javascript - 从 promise 的 then() 返回一个值?

javascript - 通过按住链接禁用打开新窗口或新标签

javascript - 基于 Angular 翻译的自定义过滤器

javascript - 如何使用可变函数调用创建顺序 promise 循环

android - 用于在 AngularJS for Android 应用程序中切换到新 html 页面的 Controller 功能

javascript - 在 AngularJS 的中介服务中解开 Promise

javascript - Mongoose 似乎悄然失败了

javascript - Node.js 使用 Promise 递归下载分块数组

javascript - 如何在 SVG 路径之外的区域放置标签?

javascript - 异步运行 lodash flow 时传递参数