从角度中的promise函数中获取数据

时间:2015-09-21 22:50:03

标签: javascript angularjs angular-promise

我有这个角度项目的服务文件部分,问题是我无法从promise.then函数返回主函数值。这里是代码

angular.module('starter.services', [])

.factory('Services', function ($http,$q) {

    var def = $q.defer();
  // Might use a resource here that returns a JSON array
    $http.get('JSONFILE').then(function (data) {
        def.resolve(data.data);
    });


this.result ={};
    var var1 = def.promise;
            var1.then(function (data){
                this.result = data;
                console.log(this.result);
            });

    // Some fake testing data
  console.log(this.result);

        return {
            all: function () {
                return var1;
            },
            remove: function (service) {
                var1.splice(var1.indexOf(service), 1);
            },
            get: function (serviceId) {
                for (var i = 0; i < var1.length; i++) {
                    if (var1[i].id === parseInt(serviceId)) {
                        return var1[i];
                    }
                }
                return null;
            }
        };

});

this.result将在promise之外返回空对象。然后在其中获取正确的数据。

1 个答案:

答案 0 :(得分:0)

实际上,如果你在这里谈论这个日志声明:

// Some fake testing data
console.log(this.result);

this.result没有相同数据的原因是因为Promise可能仍在等待(履行承诺)。

我怀疑当你看到这些console日志时,你会先看到外面的Promise显示。这是可以预期的。

此外,您的块范围不同,这意味着this.result在Promise上下文中可能不同。

尝试更改:

this.result = {};

为:

var result = {};

并且还要改变

var1.then(function (data){
    result = data;
    console.log(result);
});