2014-02-13 107 views
0

我有一個jQuery的承諾,我從ajax調用序列。例如:打破jQuery Ajax然後/承諾序列

AjaxCall1.then(AjaxCall2).then(AjaxCall3) etc... 

一些Ajax調用我做一些處理之間,例如第一個獲得該怎麼尋找,下一個執行搜索,第三個處理來自搜索的結果。

我想要做的就是打破如果AjaxCall2沒有返回搜索結果的序列。 (而且我會重新運行這個功能)

我該怎麼做?

回答

0

有了那麼你可以傳遞第二個PARAM作爲失敗的回調函數

AjaxCall1.then(AjaxCall2, AjaxCall1).then(AjaxCall3, AjaxCall2) 

或使用.done和.fail

AjaxCall1.done(AjaxCall2).fail(AjaxCall1).... //and so on 
0

我想要做的就是打破seqeuence如果AjaxCall2不返回搜索結果。

只要不「返回任何結果」,而是「拋出一個異常」 - 和順序將自動中斷。您可以在您的AjaxCall2功能中通過rejecting a deferred完成此操作。

,我實際上將重新運行該功能

通過安裝他們作爲一個錯誤處理您甚至可以重新運行它們:

function tryToFind() { 
    return AjaxCall1().then(AjaxCall2); // which might fail 
} 
tryToFind().then(null, tryToFind /* again! */).then(AjaxCall3);