2016-03-24 3 views
0

У меня возникла проблема с вызовом службы моих квартир в этом контроллере.Угловое обслуживание не вызвано .then()

$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 
    } 
} 

ОБНОВЛЕНИЕ: Я до сих пор не решил. Я заметил, что если я поставлю свою услугу на квартиры в .then(), запрос остается в ожидании, но если я вывешу его за пределы .then(), он завершит запрос, и я получу соответствующий ответ.

+0

Почему вы называете свои услуги '' '?! Как правило, '$' зарезервирован для объектов инфраструктуры. – dwjohnston

+0

Вы правы. Может быть, я должен изменить это, чтобы избежать путаницы. – ken

ответ

1

Проверьте landlord_id, посмотрите на ответ, вы отправляете объект:

access_token=[object%20Object] 

Сделать console.log из landlord_id так что вы получите структуру. Общей возможностью является то, что это массив.

+0

Да. Я получаю массив, когда я намеренно передаю объект результата, но когда я передаю свой токен, я получаю фактический токен. Я подождал некоторое время, и я получил эту «сеть :: ERR_EMPTY_RESPONSE». Если я поставлю услугу за рамки обещания, она будет вызвана без каких-либо проблем. – ken

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

Ну возможно, что проблема существует здесь:

$stripe.checkout(token, response.id) 
    .then((result) => { 
    // your stuff 
    }) 
    .then((result) => { 
    // your stuff 
    }) 
    .catch((err) => { }); 

Удалите первый .then() и посмотреть, если вы получаете логика $ result.data.success работает во втором (в настоящее время только). then()

Смежные вопросы