角度承诺然后问题

时间:2015-07-03 19:41:36

标签: javascript angularjs

玩角度资源我无法弄清楚它为什么会这样运作。 我有以下代码(让我们假设查询函数工作正常):

$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值的最后一个警报。 但似乎它的工作并不像我期待的那样。

有什么建议吗?提前谢谢。

3 个答案:

答案 0 :(得分:2)

承诺意味着在处理它时允许其他代码运行。因此,当您在服务器上处理getSomething请求时,您的浏览器正在运行其余代码,在本例中为alert(result)

此时result尚未分配,因此undefined。然后您的Web服务返回,运行成功代码并运行“success”alert,这是您获得的第二条警报消息。

答案 1 :(得分:0)

您在result定义之前提醒您,因此您会收到undefined的提醒。 result只有在thenerror完成异步操作后才会获得值。

答案 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
});