2016-04-25 8 views
1

別の約束を解決した後、DBに何かを投稿するという約束を返す必要のあるライブラリ関数があります。 私は約束を連鎖しようとしていますが、うまくいっていません。同じ関数で約束を解決して約束を返す

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"); 
        }); 
       } 

私はそれを解決し、私はこのライブラリ を使用する私のコード内の関数を呼び出すと、私は二番目を必要としながらのデータは最初の約束で示され、正しく問題をポストします。ここ

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

データは、第2約束が、最初の1ではありませんが、問題はここに正しく

+0

利用代わりに '' SUCCESS'/'ERROR'のthen'! – Bergi

+0

また、 '$ q.reject(...) 'の前に' return'sを忘れてしまった。 – Bergi

+0

@Bergiはヘッダにアクセスする必要があるので成功する必要がある – OLDRomeo

答えて

1

いくつかのポイントが作成されます。

  1. 使用.then(successCallback, errorCallback)ではなく.success().error()
  2. .then()コールバックには1つのパラメータがあり、エラーも同様です。
  3. コールバックに成功したオブジェクトのresponseには、ヘッダーとステータスも含まれています。あなたはresponse.headersresponse.statusのようにアクセスできます(詳細はOfficial AngularJS Documentation for $httpにあります)。
  4. あなたは$q.defer()「ED変数を作成し、(ロジックでそれを拒否/解決)最後にそれを返す、またはすぐに$q.rejectまたは$q.resolveを返すことができます。私はあなたのコードを編集し、の前にreturnを追加しました。

    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"); 
        }); 
    }