我覺得這是一個非常糟糕的主意,因爲我不在任何地方發現它,但在我的本地主機上測試它似乎工作。我有一個服務:AngularJs承諾:你可以使用成功嗎?
angular
.module('trips.services')
.service('Trip', Trip);
function Trip($http, $q) {
//.....
function create(data) {
var api_url = "/api/trip";
return $http.post(api_url, data).success(function(data) {
mixpanel.track("Trip: created", {}); // track that a new event happened
});
}
}
我也有一個控制器,在那裏我做這樣的事情:
Trip.create(data).success(function(data) {
//do something after the trip is created
})
現在,你可以在這個例子中,我同時使用然後答應看到和成功服務回調。如果我在調試器中執行斷點,則首先執行服務的成功回調,然後執行控制器的then子句。對於代碼組織來說,這也很好,我在服務成功後做的常見事情是在服務中,而具體的事情在控制器中。事情是,我覺得這是非常非 - 根據任何文件或例子。沒有真正找到它,我錯誤地發現了它。它在某些情況下也可能不起作用?
我也知道其他選項,$ q庫,並可能會在服務中發生變化,但最終會產生更多的代碼。
那麼,這是一個壞主意,爲什麼?任何意見都會非常有幫助。我不想制定一個錯誤的做法。
但是,您可以同時使用成功,但.success已棄用,因此不應使用,所以...請使用.then。您可以多次使用。 –
Promise可以通過'.then()'連接多次,也可以從'.then()'返回一個promise鏈。直到兒童鏈已完全解決,父母將不會解決問題。在您的服務中預處理您的數據然後返回承諾沒有任何問題。它也適用於錯誤處理。 '.then()'有兩個參數,成功CB和出錯。但是,您也可以使用'.catch()'來使事情看起來更簡單。不要忘記角度建立在承諾系統之上。 – ste2425
感謝和好點的捕獲,我看到它幾個地方,並會開始使用它。 – Vlad