角度服务没有被调用.then()

时间:2016-03-24 03:49:01

标签: angularjs promise

我在控制器内调用我的$ apartments服务时遇到问题。

$scope.checkout = () => {
$scope.stripe_err = null;

if ($scope.subscription.type === '') {
  $scope.stripe_err = 'No subscription selected';
  return;
}

Stripe.card.createToken($scope.stripeToken, stripeResponse);
}
let stripeReponse = (status, response) => {
if (status !== 200) {
  $scope.stripe_err = status;
  return;
} else {
  $stripe.checkout(token, response.id)
    .then((result) => {
      $scope.receipt = result.data.receipt / 100; // Stripe amount is in cents
      $scope.totalPrice = '';
      $scope.stripeToken = { number: '', cvc: '', exp_month: '', exp_year: '' };
    })
  .catch(err => console.error(err));
}
  $apartments.postApt(token, $scope.userInfo); // The request finishes when my services is outside the .then()
};

但当我用错误的$apartments.postApt(result, $scope.userInfo);替换参数时 然后我收到此错误PUT http://localhost:7000/landlord-api/units/[object%20Object]?access_token=[object%20Object] 500 (Internal Server Error)

这就是我公寓服务的样子。我不确定它是否是我的服务,因为如果我在$stripe.checkout()之外调用它,它将被调用。

exports.$apartments = function ($http, $q) {
  function postApt (landlord_id, newApt) {
    var deferred = $q.defer();
    $http.put('/landlord-api/units/' + landlord_id + '?access_token=' + landlord_id, newApt)
      .then(function (result) {
        return deferred.resolve(result);
      })
      .catch(err => deferred.reject(err));
    return deferred.promise;

  return {
    postApt: postApt
   }
 }

更新:我还没有解决它。我注意到的是,如果我将我的$ apartments服务放在.then()中,请求就会保持待定状态,但如果我把它放在.then()之外,它就会完成请求并得到相应的响应。

3 个答案:

答案 0 :(得分:1)

检查你的landlord_id,查看回复,你发送一个对象:

access_token=[object%20Object]

创建一个console.log的landlord_id,以便获得结构。 一个共同的可能性是它是一个数组。

答案 1 :(得分:0)

试试这样。

exports.$apartments = function ($http, $q) {
 function postApt (landlord_id, newApt) {
   var deferred = $q.defer();
   angular.element(document.getElementById("YOUR_FORM_ID")).scope().getlandlord.then  
     (function (result)){
       return deferred.resolve(result);
     }).catch(err => deferred.reject(err));
  return deferred.promise;
 return {
postApt: postApt
 }
}

scope.getlandlord(landlord_id,newApt){
    return $http.post('/landlord-api/units/' + landlord_id + '?access_token=' + landlord_id, newApt).then(function(response) {
        return response;
    });
};

答案 2 :(得分:0)

问题可能存在于此处:

{{1}}

删除第一个.then(),看看你是否得到$ result.data.success逻辑工作在第二个(现在只有).then()