【发布时间】:2015-09-24 16:19:48
【问题描述】:
我有一个非常愚蠢的问题。考虑以下几点:
vm.feed = getFeed().then(function(data) {return data;});
getFeed() 返回一个成功解决的 $q 延迟承诺(我在 Angular 上)。
我的目标是设置 vm.feed 等于成功回调返回的数据值。就像现在一样,代码只是将 vm.feed 分配为等于 getFeed() 返回的 $promise 对象。
我知道我可以简单地在解析函数中执行:vm.feed = data,但我想了解为什么这段代码不能按原样工作。
PD:promise 正确解析,即使在它被解析之后 vm.feed 仍然等于 Promise,而不是数据。我在 +10 秒后复制了 vm.feed 的 console.log:
Promise {$$state: Object} $$state: Objectstatus:1 value: Object
Promise 对象内的 value 属性包含我要分配给 vm.feed 的 Promise 的实际解决方案(例如data)。
谢谢!
【问题讨论】:
-
使用 vm.feed = getFeed().then(function(data) {return data.data ;});
-
Promise 被返回是有原因的:结果不是立即可用,而是经过一段时间的延迟。将其分配给全局变量为各种同步问题打开了大门(数据是否已经存在?)。最好的解决方案是在 promise 的回调中触发所有涉及返回数据的功能。
-
如果
getFeed使用$http考虑使用$resource,它会返回一个空对象(不是承诺),当资源响应时会被填充 -
嗨,promise 可以正确解析,即使它已经解决,vm.feed 仍然等于
Promise。在问题正文中经过 +10 秒后,我复制了 vm.feed 的控制台日志。 -
您好 fantarama,感谢您的提示,我仍然想知道为什么我提供的代码不起作用。
标签: javascript angularjs