2016-06-16 3 views
1

여기에 코드입니다 :자바 스크립트 약속/후 올바른 순서로 실행되지

vm.saveData = function(data) { 

      demoService.saveData(data, function(response) { 
       if (response.status === 200) { 
        principal.identity(true).then(function() { 
         $state.reload(); 
         return toastr.success('Success'); 
        }); 

       } 
       return toastr.error('Failure'); 
      }); 
} 

는 API에서 성공 응답을 얻기에, 그것은 단지 '성공'메시지가 표시됩니다. 그러나 대신 '실패'메시지를 먼저 표시 한 다음 '성공'메시지를 표시합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 시간 제한을 설정해야합니까, 아니면 여기에 누락 된 것이 있습니까?

+1

'else'의 리턴 오류. –

+0

네, 그게 가장 쉬운 해결책이고 그것도 효과가 있습니다. 만약 내가 다른 사람을 사용하는 경우 단순히 메시지를 표시하고 거기에서 반환을 제거 toastr 사용할 수 있습니다. 그러나 나는 왜 내가 틀린 일을하고 있는지를 알고 있는데, 그 이유는 작동하지 않는다. 나는 내 잘못이 어디에 있는지 알고 싶었다. – Samridhi

+0

약속에 대한 가장 좋은 설명 : https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html –

답변

1

상태가 200이면 나중에 success을 호출하겠다는 약속을 설정합니다.

상태가 무엇이든간에 (if 외부에 있고 else을 사용하지 않았기 때문에) 항상 error을 호출합니다.

은 아마도 당신은 작업의 진행 상황을 나타 내기 위해 여러 메시지를 보내는 등 AJAX와 같은 else

+0

상태가 200이 아닌 경우에만 오류 메시지가 호출됩니다. – Samridhi

+0

@ Samridhi - 잘못된. 이 답의 두 번째 단락, 특히 괄호 안에있는 절에서 왜 그 이유를 설명하는지보십시오. – Quentin

0

많은 시스템에 return toastr.error('Failure');를 이동하려는. 이전 메시지는 무시하고 싶습니다. 조치가 불완전한 동안 실패 메시지는 이전 이벤트의 메시지입니다.

1

약속을 설정하는 방법이 아닙니다. 약속은 .then()을 사용합니다. 함수를 콜백으로 전달하면됩니다.

vm.saveData = function(data) { 

    demoService 
    .saveData(data) 
    .then(success, error); 

    function success(response) { 
    principal.identity(true).then(function() { 
     $state.reload(); 
     return toastr.success('Success'); 
    }); 
    } 

    function error(response) { 
    return toastr.error('Failure'); 
    } 
}; 
0

내 실수를 발견했습니다. 'return'을 추가하면 문제가 해결되었습니다.

'반환 principal.identity (사실) 그 때는 (함수() {

여기에 뭔가

을 //});'

vm.saveData = function(data) { 

      demoService.saveData(data, function(response) { 
       if (response.status === 200) { 
        return principal.identity(true).then(function() { 
         $state.reload(); 
         return toastr.success('Success'); 
        }); 

       } 
       return toastr.error('Failure'); 
      }); 
} 
관련 문제