我一直在念叨$ q和承諾了幾天,我似乎明白了吧...有點。我在實踐中遇到以下情況:
- 發出$ http請求,並檢查是否可以進行後續調用。
如果第一次調用失敗,返回「無數據」,如果成功,說通話可以進行,第二個電話是由,如果不是 - 「無數據」一次。如果第二次調用成功,則返回數據,否則返回「無數據」。它看起來像這樣(約,我簡化了總體思路,所以不用擔心小錯誤這裏):
return $http.get (something) .then(function(allowedAccess){ if(allowedAccess){ return $http.get (somethingElse) .then(function(result){return {data:result} }, function(error){return {data:"n0pe"} } ) } else { return {data:"n0pe"} } }, function(){ return {data:"n0pe"} });
有人告訴我在這裏使用$ Q。我真的不明白我會怎麼樣或爲什麼。 $ http調用已經是承諾。
如果有一種方法,使這種清潔的,我看不出來。剛剛完成重讀這post on the subject。本質上,我錯過了什麼/有沒有更好的方法來做到這一點?
編輯:也只是重新閱讀a tutorial on chaining promises - 它不處理在所有呼叫失敗。基本上這是作爲盡職調查。
編輯2:這是多一個精心製作的的理論,我問一下,節選自第一篇文章:
這雖然是一個簡單的例子。如果你的then()回調函數返回另一個promise,它就變得非常強大。在那種情況下,next()只會在承諾解析後執行。這種模式可用於串行HTTP請求,例如(其中一個請求依賴於前一個的結果):
這看起來這是談論鏈:
asyncFn1(1)
.then(function(data){return asyncFn2(data)})
.then(function(data){return asyncFn3(data)})
所以,如果我理解正確的話a)。不適用於我,因爲我沒有第三個功能。 B)。將適用於我,如果我有三個功能,因爲當我運行的第一個$ HTTP請求中的if語句,只有if語句裏面做我返回另一個承諾。所以,從理論上講,如果我有三個異步函數進行鏈接,我需要將我的if語句放在promise中?
http://stackoverflow.com/a/37175801/2518285 –