2014-10-17 2 views
0

아래 코드는 제 코드입니다. 첫 번째 콘솔 메시지는 결과를 보여주고, 두 번째 메시지는 결과를 표시하지 않습니다 ... 이것은 마술처럼 약속을 어 기지 않습니다 ... 어떻게 가능합니까? 나는 정말 내 코드 덤비는거야 ... 바로이 문제를 해결하기 위해 추가 deferreds를 작성할 필요했던 지난 몇 개월 동안

this.saveAsTemplate = function(name, asNew) { 
     return _saveSet(name, asNew) 
      .then(function(result) { 
       // -> result is set correctly 
       console.log('oh but youll ****ing work... wth?', result); 
       $.ajax({ 
        url: '/rest/filter/template/'+result.id, 
        type: 'PUT', 
       }).success(function(result) { 
        console.log('successfully saved template, result: ', result); 
       }); 
      }) 
      .then(function(result) { 
       // -> result is undefined :(
       console.log('no ****ing result: ', result); 
      }); 

. 도와 주시면 대단히 감사하겠습니다!

편집 : 제대로이 질문에서 찾을 수 있습니다 체인 약속의 좋은 좋은 예 솔루션 : 그런 식으로 체인 .then를 들어 How do I chain three asynchronous calls using jQuery promises?

+0

당신이'.success'를 교체해야'.done','.success'을 사용되지 않습니다. ('success : fn'과 혼동하지 말것) –

+0

* * 코드가 깨졌습니다. 왜 사람들은 문제가 항상 자신의 버기 코드 대신 단지 한 사람 만 보았던 것보다 자신이하고있는 것을 아는 거대한 전문가 집단이 작성한 외부 라이브러리를 사용한다고 가정합니까? 아니, jQuery에서 버그를 발견하지 못했습니다. 자신의 코드에 버그를 작성했습니다. – meagar

+0

와우, 나는 그의 질문에서 그가 외부 도서관을 비난하고 있다고 제안하는 것을 보지 못했다. –

답변

4

을 (모든 함수가 반환 통지는), 당신은 그것에 약속을 반환해야 .

return $.ajax({ 

전체 샘플 :

this.saveAsTemplate = function(name, asNew) { 
    return _saveSet(name, asNew).then(function(result) { 
     console.log('oh but youll ****ing work... wth?', result); 
     // *** The following line was modified *** 
     return $.ajax({ 
      url: '/rest/filter/template/'+result.id, 
      type: 'PUT', 
     }).done/*success*/(function(result) { 
      console.log('successfully saved template, result: ', result); 
     }); 
    }).then(function(result) { 
     console.log('no ****ing result: ', result); 
    }); 
+0

내 코드를 좀 더 명확하게해야합니다. 첫 번째 함수가 작동하기 때문에 함수가 확실히 약속을 반환하는지 확인하십시오. 내 질문에 내 코드를 더 명확하게 편집 할 것입니다. –

+1

uhm ... 귀하의 질문에있는 한 약속을 반환하지 않습니다, 내가 만든 수정 그 문제를 해결합니다. –

+1

'.then()'에 전달 된 첫 번째 콜백에서 약속을 반환하지 않았습니다. 내 코드에서는, 나는 약속을 되 돌리는 중이다. 그것이 차이점입니다. 명확성을 위해 덧글을 추가했습니다. –

관련 문제