2016-04-07 3 views
1

Так что я пытаюсь сделать вызов внутри угловой службы:

'use strict'; 

angular.module('ebs-front').service('NotificationHelper', function(TransactionService, $q) { 
    this.IsNewTransaction = function(employeeId) {   
     debugger; 
     TransactionService.pendingForEmployee({ employeeId: 2 }).$promise.then(function(result) { 
      TransactionService.isNewTransaction({ id: result.id }).$promise.then(function(result) { 
       debugger; 
       return result; 
      }); 
     }); 
    }; 
}); 

В pendingForEmployee Мне нужно получить некоторые данные, и вызов isNewTransaction с результат этого вызова. Я хочу вернуть эти данные в мой контроллер:

NotificationHelper.IsNewTransaction({employeeId: $stateParams.id}).$promise.then(function(res) { 
    debugger; 
    NotificationManager.Register('success', res.isNewTransaction); 
    $state.go('root.sidebar.employee-dashboard', { id: $stateParams.id }, {reload: true}); 
}); 

Моя проблема заключается в том, что я получаю сообщение об ошибке, и я не получил ни малейшего представления о том, как решить эту проблему:

Cannot read property '$promise' of undefined. 

Исключение происходит в этой строке моего контроллера:

NotificationHelper.IsNewTransaction({employeeId: $stateParams.id}).$promise.then(function(res) 

Любая помощь будет принята с благодарностью.

+0

Вы проверили, чтобы увидеть, если 'NotificationHelper.IsNewtransaction' фактически возвращает что-то? –

ответ

0

My problem is that I keep getting an error, and I got no idea how to solve this:

Конечно, потому что NotificationHelper.IsNewTransaction не возвращает ничего, так что на самом деле это implicetly возвращает undefined.

Убедитесь, что ваша функция возвращает обещание, если вы хотите использовать API Promise. Может быть, в вашем случае return TransactionService.pendingForEmployee(...):

angular.module('ebs-front').service('NotificationHelper', function(TransactionService, $q) { 
    this.IsNewTransaction = function(employeeId) { 
     return TransactionService.pendingForEmployee({ employeeId: 2 }).$promise.then(function(result) { 
      return TransactionService.isNewTransaction({ id: result.id }).$promise.then(function(result) { 
       return result; 
      }); 
     }); 
    }; 
}); 

или вы можете сократить его:

angular.module('ebs-front').service('NotificationHelper', function(TransactionService, $q) { 
    this.IsNewTransaction = function(employeeId) { 
     return TransactionService.pendingForEmployee({ employeeId: 2 }).$promise.then(function(result) { 
      return TransactionService.isNewTransaction({ id: result.id }).$promise; 
     }); 
    }; 
}); 
+0

Да, мне нужен результат TransactionService.isNewTransaction, поэтому я думал вернуть результат, являющийся ресурсом. Я также попытался вернуть результат. $ Обещаю, но результат был тот же. Я провожу пару часов, пытаясь исследовать, но без результата. Я немного озадачен тем, как вернуть результат TransactionService.isNewTransaction в мой контроллер ... –

+0

Итак, я попробовал это: this.IsNewTransaction = function (employeeId) { отладчик; TransactionService.pendingForEmployee ({employeeId: 2}). $ Prom.then (функция (результат) { return TransactionService.isNewTransaction ({id: result.id}); }); }; И все же я получаю сообщение об ошибке: vendor.js: 23068 TypeError: Невозможно прочитать свойство «$ prom» неопределенного. Я честно понятия не имею, как это исправить .... –

+0

Еще раз: вам нужно вернуть обещание от 'NotificationHelper.IsNewTransaction'. В настоящее время вы возвращаете 'undefined'. – dfsq

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