此测试代码中的链将无法解析...它将解析级别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不喜欢我在这个请求中有这么多代码。
答案 0 :(得分:0)
两个问题:
$timeout.flush();
刷新第一个$timeout
电话。另外两个避风港已被召唤。所以你必须打三次$timeout.flush();
,而不是一次。
第二:预期结果不是3,而是4.从1开始,解析后的值始终为+1。你解决了三次。