2014-08-31 37 views
1

我得到的数据回从资源这样的:

var result = someService.getData(); 
result.$promise.then(function() { 
    console.log(result); 
}); 

这给了我以下结果:

1: "200" 
2: "1810" 
$promise: Object 
$resolved: true 
__proto__: f 

我需要把这个数据在JavaScript数组,看起来像这样:

[[1, 200], [2, 1810]] 

我试图做到这一点在forEach

var data = []; 
angular.forEach(monthly, function(value, key) { 
    var tmp = []; 
    tmp[0] = key; 
    tmp[1] = value; 

    data.push(tmp); 
}); 

但是然后$promise$resolved属性也出现在foreach中。这也看起来不是做这件事的最好方法。

我应该如何以正确的方式做到这一点?

+0

您是否尝试过直接通过你的回调函数'someService.getData()'? – axelduch 2014-08-31 18:56:38

+0

@aduch不确定你的意思?我在我的控制器内部调用'someService.getData()'并且'getData()'使用'$ resource'来调用Web服务。 '$ resource'总是返回'$ promise',这就是'getData()'返回的结果。根据你的情况,我需要改变什么? – Vivendi 2014-08-31 19:02:23

回答

3

简短的回答是电话.toJSON() - 这样做会剥离$ promise和$ resolved属性,并允许您像使用旧版本的Angular一样正确使用angular.forEach

喜欢的东西:

var result = someService.getData(); 
result.$promise.then(function(value) { 
    console.log(value.toJSON());//will strip the annoying properties, use here 
}); 
+0

好的,很高兴知道像我现在使用的“自动解包”已被弃用。但是你的方法仍然给我一个具有'$ promise'和'$ resolved'属性的对象。所以我仍然坚持原来的问题。 – Vivendi 2014-08-31 19:31:11

+0

@Vivendi在我给答案添加说明之前,我想确保 - 您必须支持哪些浏览器?我也可以假设$资源? – 2014-08-31 19:32:34

+0

@BenjaminGruenbaum:很显然OP使用'$ resource',所以没有自动解包。你的陈述是误导性的,因为'$ resource'立即返回一个空数组(或对象)是**不**弃用(除非我错过了某些东西)。 – gkalpak 2014-08-31 19:44:31