Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs $resource.query()回调结果意外_Angularjs_Callback_Ngresource - Fatal编程技术网

Angularjs $resource.query()回调结果意外

Angularjs $resource.query()回调结果意外,angularjs,callback,ngresource,Angularjs,Callback,Ngresource,我正在开发angular web应用程序。我想利用查询的错误回调来通知用户刚刚发生了一些错误。但结果并非我所期望的,以下是控制器方法: $scope.fetchAllPlayers = function() { $scope.players = PlayerFact.query({ active: true }, undefined, function() { console.log('set

我正在开发angular web应用程序。我想利用查询的错误回调来通知用户刚刚发生了一些错误。但结果并非我所期望的,以下是控制器方法:

$scope.fetchAllPlayers = function() {
    $scope.players = PlayerFact.query({
            active: true
        },
        undefined,
        function() {
            console.log('set fetchPlayersFailed to true!!!!');
            $scope.fetchPlayersFailed = true;
        }
    );
};
下面是测试代码:

it('fetchAllPlayers: should set fetchPlayersFailed to true when error happens', function() {
    httpBackend.expectGET('/api/players?active=true').respond(500);
    scope.fetchAllPlayers();
    httpBackend.flush();
    expect(scope.fetchPlayersFailed).toEqual(true);
  });
运行单元测试后,以下是错误的控制台输出:

Chrome 32.0 (Windows) LOG: 'set fetchPlayersFailed to true!!!!'
Chrome 32.0 (Windows) Controller: PlayerCtrl fetchAllPlayers: should set fetchPl
ayersFailed to true when error happens FAILED
        Expected false to equal true.
        Error: Expected false to equal true.
            at null.<anonymous> (C:/Users/I056958/Documents/My Own/javascript wo
rkspace/redjoker/test/spec/controllers/player.js:111:38)
Chrome 32.0 (Windows) LOG: 'set fetchPlayersFailed to true!!!!'
Chrome 32.0 (Windows): Executed 5 of 5 (1 FAILED) (0.297 secs / 0.043 secs)
所以我对回调感到困惑:(以下是 (正式文件)

  • 根据官方文件,查询仅仅是 GET方法,其返回对象为array,因此应该只有3个 可选参数:[参数],[成功],[错误],那么为什么是 我的第一个版本代码的回调是成功回调,它 应该是准确的错误回调

  • 即使我的第一个版本的回调是成功回调,为什么会是成功回调 打了两次电话??因为在我的测试代码中,我的回答是500,所以 根本不应该打电话

  • 在$httpBackend.flush()之前执行$rootScope.$apply(),这样应该可以工作

    旁白:
    $scope.players=
    不会做您认为它会做的事情。您需要通过$resource(…)在成功回调中设置它。从promise(首选模式)获取或通过随后的回调进行设置

    $scope.fetchAllPlayers = function() {
                    $scope.players = PlayerFact.query({
                            active: true
                        },
                        undefined,
                        undefined,
                        function() {
                            console.log('set fetchPlayersFailed to true!!!!');
                            $scope.fetchPlayersFailed = true;
                        }
                    );
                };
    
    HTTP GET "class" actions: Resource.action([parameters], [success], [error])
    non-GET "class" actions: Resource.action([parameters], postData, [success], [error])
    non-GET instance actions: instance.$action([parameters], [success], [error])