在刷新超时后,返回promise的链接函数无法解析

时间:2014-10-14 09:31:23

标签: javascript angularjs promise angular-promise

此测试代码中的链将无法解析...它将解析级别1和级别2。

    it('Three level promise', inject(function ($q, $timeout, $rootScope) {
        var plusOne = function(value) {
            var deferred = $q.defer();
            $timeout(function() {
                deferred.resolve(value+1);
            }, 10);
            return deferred.promise;
        }

        var promiseCall = function() {
            return plusOne(1).then(function (data){
                console.error('call1 resolved', data);
                return plusOne(data).then(function (data2){
                    console.error('call2 resolved', data2);
                    return plusOne(data2).then(function (data3){
                        console.error('call3 resolved', data3);
                            return data3;
                    });
                });
            });
        }

        var result;

        promiseCall().then(function (data) {
            result = data;
        });

        $timeout.flush(); // Force timeout to be flushed.

        expect(result).toBe(3);
    }));

我不明白为什么这不起作用......: - (

...而且stackoverflow不喜欢我在这个请求中有这么多代码。

1 个答案:

答案 0 :(得分:0)

两个问题:

$timeout.flush();刷新第一个$timeout电话。另外两个避风港已被召唤。所以你必须打三次$timeout.flush();,而不是一次。

第二:预期结果不是3,而是4.从1开始,解析后的值始终为+1。你解决了三次。