角度承诺然后问题
问题描述:
玩弄角度资源我不能弄清楚它为什么这样工作。 我有以下代码(我们假设查询功能正常工作):角度承诺然后问题
$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 right,
alert('success');
result = 'success';
如果成功(当执行异步时)应该先工作。 然后应该用result
值调用上次警报。 但似乎它的作品不像我期待的那样。
有什么建议吗?提前致谢。
答
诺言意味着它在处理时允许其他代码运行。因此,在服务器上处理您的getSomething
请求时,浏览器正在运行代码的其余部分,在这种情况下为alert(result)
。
此时result
尚未分配,因此它是undefined
。然后,您的Web服务返回,成功代码将运行并运行“成功”alert
,这是您收到的第二条警报消息。
答
您正在提醒result
尚未定义之前,因此您会收到undefined
的提醒。 result
只有在异步操作完成后才会获取值,可以使用then
或error
。
答
除非您需要处理由$ 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
});