[英]AngularJS : Return a promise which is constructed from the result of another promise in angular?
我在服務中定義了以下函數,其中我使用$http
來獲取一些數據並設置對象的一些字段:
function getComplexObject () {
var complexObject = {
'A': null,
'B': null
}
$http.get('someURI').then(function(data) {
complexObject.A = data;
//Do some processing and set B
return complexObject;
})
};
所以到現在為止我已經使用了$http
服務的承諾,但我不知道如何使用$q
包裝函數,以便我最終可以通過以下方式使用它:
//Using my function as a promise
myService.getComplexObject().then(function (data) {
this.complexObject = data;
})
我已經搜索了有關角度承諾的教程,但是大多數只是簡單地解釋了什么是承諾或做了類似於我已經做過的事情,我猜我想要做的是可能但我找不到正確的語法或者正確的教程。
只需將return
放在$http.get(...).then(...)
鏈前面,即
return $http.get(...).then(...);
這將確保結果getComplexObject
是將(其解決時)包含的價值承諾complexObject
。
這正是.then
的設計目標 - 它接受來自$http.get()
的承諾並返回一個新的 promise,最終將使用自己的返回值而不是原始值來解析。
FWIW,我把申報complexObject
里面.then
電話-有沒有必要為它在外部范圍,它會在無意中造成了該變量的閉包。
注:另外,要小心使用this
在您的最終回調-這可能不是你認為它是!
您可以返回一個承諾並在以后解決(請參閱: https : //docs.angularjs.org/api/ng/service/ $ q)。
function getComplexObject () {
var deferred = $q.defer();
var complexObject = {
'A': null,
'B': null
}
$http.get('someURI').then(function(data) {
complexObject.A = data;
//Do some processing and set B
deferred.resolve(complexObject);
});
return deferred.promise;
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.