【问题标题】:get out data from promise function in angular从角度的promise函数中取出数据
【发布时间】:2015-09-21 22:50:03
【问题描述】:

我有 angular 项目的这个服务文件的一部分,问题是我不能从 promise.then 函数返回值到 main 函数.. 这是代码

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.then 之外返回空对象,但在其中获取正确的数据。

【问题讨论】:

  • 1. then 函数内的 this 不会是您认为的 this。 2.你在returned对象中使用var1是完全无效的,需要大量重写

标签: javascript angularjs angular-promise


【解决方案1】:

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

// 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);
});

【讨论】:

  • 这与 console.log(this.result) 无关。这是关于将数据从 promise.then 内部移动到工厂函数。
  • console.log 然而说明了问题
  • 是的,如前所述,它只是揭示了程序流程方面的问题。我更新以解决根据您的块范围可能发生的一些其他问题。
  • 很抱歉,我在 this.result 之前尝试了这个。它给了我同样的结果。
猜你喜欢
  • 1970-01-01
  • 2015-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多