玩角度资源我无法弄清楚它为什么会这样运作。 我有以下代码(让我们假设查询函数工作正常):
$scope.getSomething = function (someObject) {
var result;
Factory.getSomething.query({ id: someObject.id }).$promise.then(function (success) {
alert('success');
result = 'success';
},
function(error) {
alert('error');
result = 'error';
});
alert(result);
};
当我执行此方法时,我得到以下内容: 1)未定义警报 2)警告“成功”
为什么undefined是第一个?据我了解$ promise,那么
alert('success');
result = 'success';
如果成功(执行异步时),应首先工作。
然后应该调用具有result
值的最后一个警报。
但似乎它的工作并不像我期待的那样。
有什么建议吗?提前谢谢。
答案 0 :(得分:2)
承诺意味着在处理它时允许其他代码运行。因此,当您在服务器上处理getSomething
请求时,您的浏览器正在运行其余代码,在本例中为alert(result)
。
此时result
尚未分配,因此undefined
。然后您的Web服务返回,运行成功代码并运行“success”alert
,这是您获得的第二条警报消息。
答案 1 :(得分:0)
您在result
定义之前提醒您,因此您会收到undefined
的提醒。 result
只有在then
或error
完成异步操作后才会获得值。
答案 2 :(得分:0)
除非有特殊原因需要处理$ resource返回的原始$ promise,否则我发现使用内置的成功/失败处理程序要容易得多。
Factory.getSomething.query({id: someObject.id}, function(data) {
// this will be asynchronously called when the API call returns with success. data is your payload
}, function(error) {
// this will be asynchronously called when the API call returns with error
});