簡體   English   中英

AngularJS:返回一個由角度中另一個諾言的結果構成的承諾?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM