我相信,这是this pervious Question中导致问题的原因。我看过here和here,但我仍然不明白发生了什么。当我登录到控制台时,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]
答案 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;
}