我必須依次執行三個不同的$ http-calls,它們相互依賴。到現在爲止我工作的解決方案IST像這樣
$http.get(".../1/...").success(function(){
$http.get(".../2/...").success(function(){
$http.get(".../3/...").success(function(){
});
});
});
現在有要做出一定的改變:如果條件爲true,第一個電話應該被跳過。我可以這樣做:
if(skipCallOne) {
$http.get(".../2/...").success(function(){
$http.get(".../3/...").success(function(){
});
});
} else {
$http.get(".../1/...").success(function(){
$http.get(".../2/...").success(function(){
$http.get(".../3/...").success(function(){
});
});
});
}
這顯然會導致大規模的代碼複製。我發現如果我使用propper函數進行特定的$ http-calls,這可能會減少。但據我瞭解一個更好的解決辦法是使用和正確鏈中的$ HTTP的承諾,像這樣:
$http.get(".../1/...").then(function(){
return $http.get(".../2/...");
}).then(function() {
return $http.get(".../3/...");
}).then(function() {
});
但現在我的問題是,我怎麼能conditionaly跳過用最少的代碼複製第一個電話?
這看起來很像的東西我希望看到的。但是我不確定是否理解使用$ http.get(...)。你不打電話,爲什麼? –
在這裏完全同意你的意見。我編輯了我的答案。我們來看一下這個文檔:.when(value)將一個可能是一個值的對象或者一個(第三方)包裝成一個$ q promise。當你處理可能或不可能成爲承諾的對象時,或者承諾來自不可信任的來源時,這很有用。 –