2017-10-18 80 views
2

我Ajax調用的下一個鏈條:兩種鏈接ajax jquery調用的方法。正確對象,真愛?

ajaxCall1().then(function(){ 
    ajaxCall2(). then(function(){ 
     ajaxCall3().then(function(){ 
      .... 
     }) 
    }) 
}) 

正如你所看到的,我沒有返回Ajax調用但它只是正常工作。接下來的方法就是我所看到的例子:

ajaxCall1() 
    .then(function(){ 
     return ajaxCall2() 
    }) 
    .then(function(){ 
     return ajaxCall3() 
    }).then(function(){ 
     .... 
    }) 

什麼是正確的方法?

由於

回答

3

第一圖案實際上是一個well-known promise anti-pattern

承諾的可鏈接性允許我們擺脫嵌套回調並保持垂直結構。

+0

好的,但我可以確保ajax調用不在同一時間執行的第一種方式,對吧?雖然根據模式是不好的風格 – user3254515

+0

第二種方式和第一種方式都是順序執行你的ajax函數。 – nem035

3

第二個。在第一個中,您不會創建承諾鏈。第一個應該是這樣的:

ajaxCall1().then(function() { 
    return ajaxCall2().then(function() { 
    return ajaxCall3().then(function() { 
     ..... 
    }) 
    }) 
}) 

但即使如此,你有深嵌套,這是一般的不好的編碼風格。

如果要並行執行的請求,這些請求不依賴於對方,在他們這樣做不要緊,你可以寫的順序:

Promise.all([ 
    ajaxCall1(), 
    ajaxCall2(), 
    ajaxCall3() 
    ]) 
    .then(results => { 

    }) 

如果訂單事宜,然後使用你的第二種方法。

+0

如果有時您返回ajax調用或者有時不是因爲不需要,如何編寫第一種方式? – user3254515

+0

@ user3254515我不完全明白你在問什麼。 –

+0

我的意思是,如果一個ajax調用的響應是錯誤,如何中斷ajax調用鏈? – user3254515