[英]Multiple chained deferred functions using q in AngularJS stop returning data
我试图将多个延迟函数调用链接在一起,以便下一个调用获取前一个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/
摘录自$ q的官方文档:
然后(successCallback,errorCallback) - 无论何时或将要解决或拒绝承诺,只要结果可用,就会异步调用其中一个成功或错误回调。 使用单个参数调用回调结果或拒绝原因。
此方法返回一个新的promise,它通过successCallback或errorCallback的返回值解析或拒绝。
根据Domenic的幻灯片 ,对于successCallack或errorCallback的返回值:
如果返回值是一个promise,则promise将采用返回的promise的状态,否则立即使用返回值调用成功回调
根据定义,您的代码缺少return
关键字。 它应该如下:
asyncFn1(1)
.then(function(data){return asyncFn2(data)})
.then(function(data){return asyncFn2(data)})
.then(function(data){return asyncFn2(data)});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.