2017-09-21 37 views
0

這篇文章擴展了以前已經解決的問題。請參閱以下內容:Nesting promises with $resources in AngularJS 1.0.7

考慮到這種方法,我想對函數進行並行調用,並在兩者都完成後,運行帶搜索結果的searchBoats函數。我想我可以嵌套承諾,但我也認爲它可以並行執行,也許可以使用$ q.all。不幸的是,這個承諾的話題讓我感到困惑,我不知道該怎麼做。

以以前的帖子例子,我想這樣做:

var parseURL = function() { 
    var deferred = $q.defer(); 
    var promise = deferred.promise; 
    promise.then(function success(result) { 
    console.log(result); 
    searchBoats(result); 
    }); 

    // Instead of resolve when parseBoatType promise is returned, I would like to 
    // wait for two promises 
    parseBoatType().then(deferred.resolve); 
    parseDestination().then(deferred.resolve); 
    // of course, with this code deferred will be resolved when first promise 
    // comes. Is it possible to use $q.all here? 
}; 
parseURL(); 
+0

我不明白,我向您展示瞭如何在第一個問題中使用'$ q.all()'。您需要在需要等待的任何函數中返回一個Promise,並給出'$ q.all()'這些函數調用返回的promise的數組,您需要等待。 – zero298

回答

1

正如你剛纔的問題,就沒有必要在這裏使用deferred。只需使用$q.all(),它返回一個承諾:

var parseURL = function() { 
    $q.all([parseBoatType(), parseDestination()]) 
     .then(function (results) { 
      console.log(results); 
      searchBoats(results); 
     }); 
}; 
parseURL(); 
+0

謝謝!我花了三天時間來解決整個難題。 – Rober