2016-09-21 3 views
0

올바른 개체를 반환하지 않습니다약속 내가 약속의 다음 체인에 문제가

Parse.Cloud.run('cloudlogin', { 
     fb_accessToken: $localStorage.accessTokenFacebook 
     , facebookID: FACEBOOKID 
    }, { 
     success: function (userdata) { 
      alert(JSON.stringify(userdata)) 
      $localStorage.username = userdata.username; 
      $localStorage.password = userdata.password; 
      $localStorage.fb_access_token = userdata.fb_accessToken; 
      var bool = userdata.isnewuser 
      alert('bool' + bool) 
      return bool 
     } 
     , error: function (error) { 
      alert(error) 
      $state.go("login") 
       .then(function() { 
        $ionicLoading.hide() 
       }) 
     } 
    }) 
    .then(function (isnewuser) { 
     $localStorage.organizerAccess = true; 
     alert('fbdata' + JSON.stringify(isnewuser)) 
    }) 

내가 대신 두 번째 약속 이에 부울 'isnewuser'를 반환하는 첫 번째 약속을하고 싶습니다 전체 'userdata'객체가 반환됩니다. 어떤 생각?

+0

에서 호출? 다음 약속에서 찾고있는 부동산을 이미 갖고 계신 것 같습니다. –

+0

네, 분명히 할 수는 있지만 올바른 해결책은 아닙니다 .... 문제는 '반환 bool'이해야 할 일을 반환하지 않는 이유입니다. – ai20

+0

나는 이것이 'Parse.Cloud.run'과 관련이 있다고 믿습니다.' 약속의 구현. 표준 HTML Promise는 예상대로 작동하지만 바셀라 HTML Promise가 아닌 Promise를 자체 구현 한'Parse.Cloud.run'에 함수를 입력하는 것입니다. –

답변

0

설명서에 - then(successCallback, [errorCallback], [notifyCallback]) - 약속이 해결되거나 거부 될 때와 관계없이 결과를 사용할 수있게되면 즉시 성공 또는 오류 콜백 중 하나가 비동기 적으로 호출됩니다. 콜백은 결과 또는 거절 이유와 같은 단일 인수로 호출됩니다. 또한 알림 콜백은 약속이 해결되거나 거부되기 전에 진행 표시를 제공하기 위해 0 번 이상 호출 될 수 있습니다.

그래서 리턴 값 then 복용 대신하여 개체 userdata

+0

여러 콜백이'success' 대신'then'을 사용하면 –

0

성공이 반환 값이 그 다음에 전달되지 콜백 함수이다 success: function (userdata) 발생하는 리턴 걸린다. bool 값을 다음에 전달하려면 아래 코드를 다시 작성해야합니다.

Parse.Cloud.run('cloudlogin', { 
     fb_accessToken: $localStorage.accessTokenFacebook 
     , facebookID: FACEBOOKID 
    }, { 
     error: function (error) { 
      alert(error) 
      $state.go("login") 
       .then(function() { 
        $ionicLoading.hide() 
       }) 
     } 
    }).then(function (userdata) { 
      alert(JSON.stringify(userdata)) 
      $localStorage.username = userdata.username; 
      $localStorage.password = userdata.password; 
      $localStorage.fb_access_token = userdata.fb_accessToken; 
      var bool = userdata.isnewuser 
      alert('bool' + bool) 
      return bool 
     }) 
    .then(function (isnewuser) { 
     $localStorage.organizerAccess = true; 
     alert('fbdata' + JSON.stringify(isnewuser)) 
    }) 
+0

'error' 콜백을 피해서'onrejected' 매개 변수로'then'에 전달해야합니다. – Bergi

0
login: function() { 

    var deferred = $q.defer(); 

    Parse.Cloud.run('cloudlogin', { 
     fb_accessToken: $localStorage.accessTokenFacebook, 
     facebookID: FACEBOOKID 
    }).error(function (error) { 
     alert(error) 
     $state.go("login") 
     .then(function() { 
      $ionicLoading.hide() 
     }) 
    }) 
    .then(function (userdata) { 
     alert(JSON.stringify(userdata)) 
     $localStorage.username = userdata.username; 
     $localStorage.password = userdata.password; 
     $localStorage.fb_access_token = userdata.fb_accessToken; 
     deferred.resolve(userdata.isnewuser); 
    }); 

    return deferred.promise; 
} 

쓰기 당신은 단지`userdata.isnewuser`을 사용할 수 없습니다이 서비스 클래스의 기능과 컨트롤러

+0

설명하면 코드에서 변경 한 사항과 그 이유. – Bergi

+0

[지연된 반 패턴] (http://stackoverflow.com/q/23803743/1048572)을 피하십시오! – Bergi

+0

그래서 서비스 클래스를 만들 수 있다면 우리는 기본적으로 각도 js 워크 플로를 원할 때 호출 할 수 있습니다. 서비스 클래스는 서버 코드와 상호 작용합니다 –

관련 문제