2016-04-25 80 views
1

我有一個庫函數,它需要返回promise來在DB中解析另一個promise後發佈的東西。 我試圖鏈接承諾,但不工作。在解決相同函數中的promise後返回promise

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

數據不是第二個承諾,但第一個,但正確創建此

+0

使用'then',而不是'success' /'error'! – Bergi

+0

你也忘了在'$ q.reject(...)之前'返回'' – Bergi

+0

@Bergi需要使用成功,因爲需要訪問標題 – OLDRomeo

回答

1

幾點問題。

  1. 使用.then(successCallback, errorCallback)而不是.success().error()
  2. .then()回調函數有一個參數,錯誤也是如此。
  3. 成功回調中的response對象還包含標頭和狀態。您可以像這樣訪問它們:response.headersresponse.status(更多信息,請參閱Official AngularJS Documentation for $http)。
  4. 您可以創建一個$q.defer()'ed變量並在最後返回它(在邏輯中解析/拒絕它),或者立即返回$q.reject$q.resolve。我編輯了您的代碼並在$q.reject之前添加了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"); 
        }); 
    }