2017-10-18 14 views
2

나는 아약스 호출의 다음 체인이 있습니다ajax jquery 호출을 연결하는 두 가지 방법. 맞지?

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

당신은 내가 아약스 호출을 반환하지 오전하지만 그냥 잘 작동 볼 수 있듯이. 다음은 내가 예로서 본 것입니다 :

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

올바른 방법은 무엇입니까?

감사

답변

3

첫 번째 패턴은 실제로 well-known promise anti-pattern이다.

약속의 연결 가능성으로 인해 중첩 콜백에서 벗어나 수직 구조를 유지할 수 있습니다.

+0

좋아,하지만 아약스 호출이 동시에 실행되지 않도록 할 수있는 첫 번째 방법은 맞습니까? 패턴에 따르면 나쁜 스타일입니다 – user3254515

+0

두 번째 방법과 첫 번째 방법은 모두 순차적으로 귀하의 아약스 기능을 실행하고 있습니다. – nem035

3

두 번째 것. 처음에는 약속의 고리를 만들지 않습니다. 첫 번째 방법은 다음과 같이보아야합니다.

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

그러나 그렇다고해도 일반적으로 나쁜 코딩 스타일 인 깊은 중첩이 있습니다. 주문 사항은 다음 사용

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

    }) 

경우 : 당신이 병렬로 요청을 실행하려면, 이러한 요청이 서로 그들은 당신이 쓸 수있는 중요하지 않습니다 완료되는 순서에 의존하지 않는

두 번째 접근법.

+0

가끔씩 아약스 호출을 반환하거나 가끔씩 필요하지 않기 때문에 첫 번째 방법을 작성하는 방법은 무엇입니까? – user3254515

+0

@ user3254515 당신이 묻고있는 것을 정확히 이해하지 못합니다. –

+0

아약스 호출의 응답이 오류 인 경우 아약스 호출 체인을 끊는 방법은 무엇입니까? – user3254515