Angularjs:无法读取未定义

时间:2016-04-07 14:34:23

标签: angularjs service promise

所以我试图在角度服务中进行调用:

'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)

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

  

我的问题是我一直收到错误,我不知道如何解决这个问题:

当然,因为NotificationHelper.IsNewTransaction没有返回任何内容,所以实际上它会隐含地返回undefined

如果要使用Promise 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;
        });
    };
});