2015-07-03 99 views
1

玩弄角度資源我不能弄清楚它爲什麼這樣工作。 我有以下代碼(我們假設查詢功能正常工作):角度承諾然後問題

$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值調用上次警報。 但似乎它的作品不像我期待的那樣。

有什麼建議嗎?提前致謝。

回答

2

諾言意味着它在處理時允許其他代碼運行。因此,在服務器上處理您的getSomething請求時,瀏覽器正在運行代碼的其餘部分,在這種情況下爲alert(result)

此時result尚未分配,因此它是undefined。然後,您的Web服務返回,成功代碼將運行並運行「成功」alert,這是您收到的第二條警報消息。

0

您正在提醒result尚未定義之前,因此您會收到undefined的提醒。 result只有在異步操作完成後纔會獲取值,可以使用thenerror

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