2016-04-03 20 views
0

1)I具有的jquery的鏈然後(),是這樣的:的Javascript然後()鏈接 - 這遞延確實第二然後()對應於?

someAjax().then(function(val) { console.log("done 1: " + val); return val + 1; }, 
       function(val) { console.log("fail 1: " + val); return val + 2; }, 
       function(val) { console.log("prog 1: " + val); return val + 3; } 

     ).then(function(val) { console.log("done 2: " + val) }, 
       function(val) { console.log("fail 2: " + val) }, 
       function(val) { console.log("prog 2: " + val) } 
     ) 

據我所知,第一的三個功能(三個參數),則()對應於Deferred對象的狀態來自someAjax()。

但是,我不明白,什麼Deferred對象做的第二然後對應的三個函數(args)?例如,如果(或者是沒有可能),那麼,什麼每個第一的三個功能的()可能返回自己的Deferred對象?

我覺得我可以在這裏誤解的東西。感謝任何澄清。

////////////////////////////////////////////// //////

2)我有另一個鏈接是這樣的:

$.getJSON(url).then(
       doneFunction1, 
       errorFunction1 
      ).then(
       doneFunction2 
      }); 

的doneFunction1看起來是這樣的:

function doneFunction1(val){ 
    if(val > 1) 
     return $.ajax(url2); 
} 

所以這並不總是會返回一個承諾,因爲你請參閱,取決於val。 如果它沒有返回Promise(例如val < 1),那麼第二步如何繼續?會導致錯誤?因爲據我所知,沒有承諾打電話then()。我的猜測是,它可能只是調用$.getJSON的第一個Promise的then(),但我可能是錯的。

基本上,我試圖在'val < 1'時根本沒有第二個then()。可能嗎?

+0

它指的是無論你從第一。然後承諾 – JordanHendrix

+0

'.then'一般只需要兩個功能,第一個被稱爲回當承諾解決時,第二個被拒絕? – adeneo

+0

注意到你正在使用jQuery,而不是正確的A + promise,在這裏將是相當重要的! – adeneo

回答

1

你可以只返回一個遞延被解決或拒絕

function doneFunction1(val){ 
    if(val > 1) { 
     return $.ajax(url2); 
    } else { 
     var def = $.Deferred(); 
     return def.reject(); // or def.resolve('something'); to hit the success handler 
    } 
} 

$.getJSON(url).then(
    doneFunction1, 
    errorFunction1 
).then(
    doneFunction2, 
    errorFunction2 // only needed if you want to catch the error 
}); 
相關問題