我在Angular中设置了一个简单的$q
系统。
控制器只包括:
var fun1 = function(){
var deferred = $q.defer();
$timeout(function(){
console.log("fun1 resolving...");
deferred.resolve(5);
}, 1000);
return deferred.promise;
}
var fun2 = function(){
var deferred = $q.defer();
$timeout(function(){
console.log("fun2 resolving...");
deferred.resolve(6);
}, 1000);
return deferred.promise;
}
var promise = fun1().then(fun2()).then(function(data){
console.log(data);
});
我希望打印出来:
fun1 resolving....
fun2 resolving....
5
但是打印出
fun1 resolving....
5
fun2 resolving....
这对我来说很奇怪。为什么最后一个链式console.log
的{{1}}在实际.then()
之前进行评估?
答案 0 :(得分:2)
这不是因为您正在调用fun2
,而不是仅仅将其传递到then
吗?
就像:
var promise = fun1().then(fun2).then(function(data){
console.log(data);
});
但结果将是:
fun1 resolving....
fun2 resolving....
6
而不是输出5,因为fun2
会将6(deferred.resolve(6);
)传递给您的上一次回调。
答案 1 :(得分:1)
因为您正在执行fun2()
而不是将fun2
作为函数提供:
var promise = fun1().then(fun2).then(function(data){
console.log(data);
});
then
需要一个返回promise的函数。