大佬教程收集整理的这篇文章主要介绍了angularjs – angular $q,如何链接在for循环内和之后的多个promises,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在for循环后,我想执行另一个代码块,但不是在for循环中的所有以前的调用已经解决之前。
我现在的问题是,for循环之后的代码块在所有异步调用完成之前执行,或者根本不执行。
代码部分与FOR循环和代码块之后(完整代码,请参阅fiddle):
[..] function outerFunction($q,$scopE) { var defer = $q.defer(); readSome($q,$scopE).then(function() { var promise = writeSome($q,$scope.testArray[0]) for (var i=1; i < $scope.testArray.length; i++) { promise = promise.then( angular.bind(null,writeSome,$q,$scope.testArraY[i]) ); } // this must not be called before all calls in for-loop have finished promise = promise.then(function() { return writeSome($q,"finish").then(function() { console.log("resolve"); // resolving here after everything has been done,yey! defer.resolve(); }); }); }); return defer.promise; }
我创建了一个jsfiddle可以在这里找到http://jsfiddle.net/riemersebastian/B43u6/3/。
此时它看起来像执行顺序很好(见控制台输出)。
我的猜测是,这是因为每个函数调用立即返回,而不做任何真正的工作。我试图延迟defer.resolve与setTimeout但失败(即最后的代码块从未执行)。你可以在小提琴的outcommented块中看到它。
在你的情况下,你可以做类似:
function outerFunction() { var defer = $q.defer(); var promises = []; function lastTask(){ writeSome('finish').then( function(){ defer.resolve(); }); } angular.forEach( $scope.testArray,function(value){ promises.push(writeSome(value)); }); $q.all(promises).then(lastTask); return defer.promise; }
以上是大佬教程为你收集整理的angularjs – angular $q,如何链接在for循环内和之后的多个promises全部内容,希望文章能够帮你解决angularjs – angular $q,如何链接在for循环内和之后的多个promises所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。