看板 Ajax 關於我們 聯絡資訊
※ 引述《TonyQ (自立而後立人。)》之銘言: 謝謝你慷慨地講解。:)我要提供另一個解決相同難題的方法。 不過首先回顧一下題目: 要如何確保所有相依的事件一一發生,並且達到預期的順序。 這個問題可以用 deferred.pipe 漂亮解決。 假設我們現在有一個網址 A,開網址 A 可能成功也可能失敗,成功得到網址 B。 然後開網址 B 有可能成功,也可能失敗,成功得到網址 C。 又開網址 C 也可能成功或失敗,成功得到我們要的資料, 無論哪一個失敗我們都要 throw new Error。 沒有 deferred.pipe 的時候我們這樣寫: $.get(A).done(function(B) { $.get(B).done(function(C) { $.get(C).done(function(data) { console.log(data); }).fail(function() { throw new Error("failed getting data"); }); }).fail(function() { throw new Error("failed getting data"); }); }).fail(function() { throw new Error("failed getting data"); }); 有了 deferred.pipe 的時候就漂亮了: $.get(A).pipe(function(B) { return $.get(B); }).pipe(function(C) { return $.get(C); }).pipe(function(data) { console.log(data); },function(error) { throw new Error("failed getting data"); }); 連 throw new Error 都少了好幾個。 -- Oni devas ami animalojn. Ili estas tiel bongustaj. One should love animals. They are so tasty. 每個人都應該愛動物,他們是如此美味。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.180.52.121