在AngularJS中使用q的多链延迟函数停止返回数据
我试图链接在一起多个延迟函数调用,使下一个调用获得以前的deferred.resolve的结果。当我连接在一起超过2个这些调用,数据停止返回。
这里是角度控制器中的基本代码: $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:
对于successCallack或errorCallback的返回值,根据Domenic’s slides:
根据定义,您的代码缺少return关键字。应该如下: asyncFn1(1) .then(function(data){return asyncFn2(data)}) .then(function(data){return asyncFn2(data)}) .then(function(data){return asyncFn2(data)}); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |