【问题标题】:Put $promise data in a Javascript array将 $promise 数据放入 Javascript 数组中
【发布时间】:2014-10-25 01:18:02
【问题描述】:

我正在从这样的资源中取回数据:

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 中。这看起来也不是最好的方法。

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

【问题讨论】:

  • 您是否尝试过将您的回调函数直接传递给someService.getData()
  • @aduch 不确定您的意思?我在我的控制器中调用someService.getData(),而getData() 使用$resource 调用Web 服务。 $resource 总是返回 $promise,所以这就是 getData() 返回的内容。根据你我有什么需要改变的?

标签: javascript angularjs foreach promise angular-promise


【解决方案1】:

简短的回答是调用 .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
});

【讨论】:

  • 好的,很高兴知道我现在使用的“自动展开”已被弃用。但是您的方法仍然给了我一个具有$promise$resolved 属性的对象。所以我仍然坚持原来的问题。
  • @Vivendi 在我添加澄清之前我想确定的答案 - 你必须支持哪些浏览器?我也可以假设 $resource 吗?
  • @BenjaminGruenbaum:很明显 OP 使用的是$resource,因此没有自动展开。您的陈述具有误导性,因为$resource 立即返回一个空数组(或对象)已被弃用(除非我遗漏了什么)。
  • @ExpertSystem 我会进一步调查它,虽然它似乎仍然存在于源代码中,但我清楚地记得读过它在 $resource 中被删除(而不仅仅是承诺) - 我承认再想一想,这可能是在一个“有点内部”的谷歌文档中,有 1.3 的计划 - 毕竟这可能没有在 1.3 中结束(就像那里的其他东西一样),我可能在这里错了,所以拿我写的加两粒盐-我会四处打听并确定。
  • 我将在此期间删除该部分。
猜你喜欢
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
相关资源
最近更新 更多