在 AngularJS 中使用回调而不是承诺会导致单元测试中出现不同的行为。为什么?
Using callbacks instead of promises in AngularJS results in different behavior in unit tests. Why?
我正在测试 $resource。如果我有这样的代码:
$resource.do(stuff).$promise.then(function(data){
console.log(1);
});
console.log(2);
我打印出来了:
2
1
但是如果我有这样的代码:
var callback = function(data){
console.log(1);
}
$resource.do(stuff,callback);
console.log(2);
我打印出来了:
1
2
为什么?我发现使用第二种方法,我不需要调用 $rootScope.$apply() 来从我的单元测试中获得正确的输出(而不是 console.log(2),我 return a多变的)。使用第一种方法,我必须在我的单元测试中调用 $rootScope.$apply() 才能获得输出。我认为传递回调与调用 .then 是一样的吗?
一旦 $resource
完成其正在执行的操作,就会调用回调。这不必在 Angular 摘要循环中。承诺在 angular 摘要周期中解决。当您致电 $rootScope.$apply()
更多请看:
我正在测试 $resource。如果我有这样的代码:
$resource.do(stuff).$promise.then(function(data){
console.log(1);
});
console.log(2);
我打印出来了:
2
1
但是如果我有这样的代码:
var callback = function(data){
console.log(1);
}
$resource.do(stuff,callback);
console.log(2);
我打印出来了:
1
2
为什么?我发现使用第二种方法,我不需要调用 $rootScope.$apply() 来从我的单元测试中获得正确的输出(而不是 console.log(2),我 return a多变的)。使用第一种方法,我必须在我的单元测试中调用 $rootScope.$apply() 才能获得输出。我认为传递回调与调用 .then 是一样的吗?
一旦 $resource
完成其正在执行的操作,就会调用回调。这不必在 Angular 摘要循环中。承诺在 angular 摘要周期中解决。当您致电 $rootScope.$apply()
更多请看: