2016-04-25 19 views
1

Ich habe Bibliotheksfunktion, die das Versprechen, etwas in DB nach dem Veröffentlichen einer anderen Versprechen zurückgeben muss. Ich versuche die Versprechen zu ketten, aber nicht funktioniert.Rückgabe Versprechen nach Auflösung Versprechen in derselben Funktion

postIssue: function (issue) { 
        return getUserConfiguration() 
        .success(function (response, status, headers) { 
         var token = headers("X-XSRF-TOKEN"); 
         if (token) { 
          _cookie = token; 
          if (issue.isValid()) { 
           var url = _baseURL + "/api/issue/"; 
           var data = JSON.stringify(issue); 
           var config = { 
            xhrFields: { withCredentials: true }, 
            headers: { "X-XSRF-TOKEN": _cookie } 
           }; 
           return $http.post(url, data, config); 
          } 
          else { 
           return $q.reject("Issue doesn't have valid fields to submit"); 
          } 
         } 
         else { 
          $q.reject("There is no XSRF token on response header"); 
         } 
        }) 
        .error(function() { 
         $q.reject("Error getting user's configuration"); 
        }); 
       } 

Wenn ich die Funktion in meinem Code nennen, wo ich diese Bibliothek Es löst verwenden und bucht ist das Problem die Daten korrekt in dann der ersten Versprechen gezeigt, während ich die zweite benötigen.

libraryAPI.postIssue(createIssue).then(function (data) { 
       console.log(data); 
      },function (error) { 
       console.log(error); 
      }); 

Daten sind hier nicht von den zweiten Versprechen aber die erste, aber Ausgabe korrekt

+0

Verwenden 'then' statt' success'/'error' !!! – Bergi

+0

Auch vergessen Sie 'return's vorher' $ q.reject (...) ' – Bergi

+0

@Bergi müssen Erfolg verwenden, da auf die Header zugreifen müssen – OLDRomeo

Antwort

1

Mehr Punkte hier erstellt.

  1. Verwenden .then(successCallback, errorCallback) statt .success() und .error().
  2. Die Rückrufe hat einen Parameter, und so ist der Fehler.
  3. Das response Objekt in einem erfolgreichen Rückruf enthält auch die Header und den Status. Sie können auf sie wie folgt zugreifen: response.headers und response.status (weitere Informationen in der Official AngularJS Documentation for $http).
  4. Sie können entweder eine Variable $q.defer() ed erstellen und sie am Ende zurückgeben (in der Logik auflösen/ablehnen) oder sofort eine $q.reject oder $q.resolve zurückgeben. Ich habe Ihren Code bearbeitet und return vor $q.reject hinzugefügt.

    postIssue: function (issue) { 
        return getUserConfiguration() 
        .then(function (response) { 
         var headers = response.headers; 
         var token = headers("X-XSRF-TOKEN"); 
         if (token) { 
          _cookie = token; 
          if (issue.isValid()) { 
           var url = _baseURL + "/api/issue/"; 
           var data = JSON.stringify(issue); 
           var config = { 
            xhrFields: { withCredentials: true }, 
            headers: { "X-XSRF-TOKEN": _cookie } 
           }; 
           return $http.post(url, data, config); 
          } 
          else { 
           return $q.reject("Issue doesn't have valid fields to submit"); 
          } 
         } 
         else { 
          return $q.reject("There is no XSRF token on response header"); 
         } 
        }, function (error) { 
         return $q.reject("Error getting user's configuration"); 
        }); 
    } 
    
Verwandte Themen