我正在尝试将多个延迟函数调用链接在一起,以便下一个调用获得前一个 deferred.resolve 的结果。当我将这些调用中的两个以上链接在一起时,数据将停止返回。
这是角度控制器内的基本代码:
$scope.runAsync = function() {
var asyncFn1 = function(data){
var deferred = $q.defer();
$timeout(function(){
console.log("Async fn1 " + data);
$scope.outputLines.push("Async fn1 " + data);
deferred.resolve("Async fn1 " + data);
},1000);
return deferred.promise;
}
var asyncFn2 = function(data){
var deferred = $q.defer();
$timeout(function(){
console.log("Async fn2 " + data);
$scope.outputLines.push("Async fn2 " + data);
deferred.resolve("Async fn2 " + data);
},1000);
return deferred.promise;
}
asyncFn1(1)
.then(function(data){asyncFn2(data)})
.then(function(data){asyncFn2(data)})
.then(function(data){asyncFn2(data)});
}
当我运行它时,我得到以下输出:
Async fn1 1
Async fn2 Async fn1 1
Async fn2 undefined
Async fn2 undefined
如何将它们链接在一起,以便第三次调用从第二次调用中获取结果,第四次从第三次调用中获取结果?
我创建了一个 jsFiddle:http: //jsfiddle.net/rhDyL/