0

我相信,这是导致这个问题的原因。我看过这里这里,但我仍然不明白发生了什么。当我登录到控制台时,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()andmonth.resolve(temp)并尝试记录month.promise我得到的值[Object object]而不是与 temp 相同时。

这是应该预期的吗?

如果否- 我做错了什么(这就是为什么我使用 $q.defer()以防它是一个因素)

如果是- 如何转换month.promise为更易消耗的形式?即如果 temp 是一个数组,我如何month.promise作为一个数组访问temp[0] = month.promise[0]

下面是我的代码示例,但我的所有控制器和服务都可以在这里找到,我基本上只想将一个数组(或 JSON)返回到我的控制器而不是[Object object]

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]);

});

更新

根据下面@CuongLe 的建议,我添加了以下代码,我可以成功记录我的数据,但是[Object object]当我返回它时我仍然得到

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

2 回答 2

1

文件

延迟对象的目的是公开相关的 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;
        });

}
于 2013-08-09T09:53:10.520 回答
1

使用then方法返回一个承诺:

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;         
}
于 2013-08-09T10:32:38.083 回答