角度承诺然后问题

角度承诺然后问题

问题描述:

玩弄角度资源我不能弄清楚它为什么这样工作。 我有以下代码(我们假设查询功能正常工作):角度承诺然后问题

$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只有在异步操作完成后才会获取值,可以使用thenerror

除非您需要处理由$ 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 
});