※ 引述《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