【发布时间】:2014-10-14 09:31:22
【问题描述】:
此测试代码中的链无法解析...它解析了级别 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 不喜欢我在这个请求中有这么多代码。
【问题讨论】:
-
所以你永远不会得到
call3 resolved日志或测试失败? -
为什么在成功处理程序中使用
console.error(而不是console.log)? -
就目前而言,预计
result是undefined。将expect()移动到promiseCall().then(function(){...})中,并期望data是NaN(undefined + 1)。然后从各自的函数中返回data和data2并期望data是4(1+1+1+1)。
标签: javascript angularjs promise angular-promise