为什么deferred.resolve(object)与myobject不同之后deferred.promise的结果

时间:2013-08-09 09:42:03

标签: javascript angularjs

我相信,这是this pervious Question中导致问题的原因。我看过herehere,但我仍然不明白发生了什么。当我登录到控制台时,temp的值我按预期得到结果1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31但是当我使用var month = $q.defer()month.resolve(temp)并尝试记录{{1}的值时我得到month.promise而不是与temp。相同。

这应该是预期的吗?

如果否 - 我做错了什么(This is why I I'm using $q.defer(),如果它是一个因素)

如果是 - 如何将[Object object]转换为更易消费的形式?即如果temp是一个数组,我如何作为month.promise

的数组访问month.promise

下面是我的代码示例,但是我的所有控制器和服务可以找到here,我基本上只想将一个数组(或JSON)返回给我的控制器,而不是temp[0] = month.promise[0]

[Object object]

更新

根据@CuongLe的建议,我已经添加了以下代码,我可以成功记录我的数据但是当我返回时仍然会得到var month = $q.defer(); $http.get('getMonth.php?date=' + date) .success(function (data, status, headers, config) { var temp = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]; console.log("Temp : " + temp + " !!!"); month.resolve(temp); //month.resolve(data); //console.log("data "+data[0]); console.log("resolved " + month); console.log("resolved[0] " + month[0]); console.log("resolved.promise " + month.promise + " !!!"); console.log("resolved.promise[0] " + month.promise[0]); });

[Object object]

2 个答案:

答案 0 :(得分:1)

来自document

  

延迟对象的目的是公开关联的Promise实例以及可用于表示任务成功或不成功完成的信号的API。

因此,您应该继续使用成功方法调用then来获取temp

var promise = month.promise;
promise.then(
    function(temp){
    console.log(temp);
});

您的服务:

angular.module('testApp', [])
    .factory('memberFactory', function ($http, $q) {

    var getMonth = function (date) {
        var month = $q.defer();

        $http.get('getMonth.php?date=' + date)
            .success(function (data, status, headers, config) {

            var temp = [1, 2, 3, 4, 5, 6, 7,...];
            month.resolve(temp);
        });           
        return month.promise;
    }

    return {
        getMonth: getMonth
    };  
});

控制器:

function myController($scope, memberFactory) {

    promise = memberFactory.getMonth("2013-08-01 06:30:00");

     promise.then(
        function (monthDays) {
           console.log("monthDays : " + monthDays + " !!!");

            var dates = [];
            for (var i = 0; i < monthDays.length; i++) {
                if (i % 7 == 0) dates.push([]);
                dates[dates.length - 1].push(monthDays[i]);
            }

            $scope.dates = dates;
        });

}

答案 1 :(得分:1)

使用然后方法返回一个承诺:

obj.getMonth = function (date) {
    var month = $q.defer();
    $http.get('getMonth.php?date=' + date)
        .then(function (data, status, headers, config) { 
            var temp = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 
                16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]; 
            month.resolve(temp); 
        });
    return month.promise;         
}