所以我有一个情况,我有多个未知长度的承诺链。我想要一些操作运行时,所有的CHAINS已经处理。这是可能吗?这里是一个例子:
- app.controller('MainCtrl',function($scope,$q,$timeout) {
- var one = $q.defer();
- var two = $q.defer();
- var three = $q.defer();
- var all = $q.all([one.promise,two.promise,three.promise]);
- all.then(allSuccess);
- function success(data) {
- console.log(data);
- return data + "Chained";
- }
- function allSuccess(){
- console.log("ALL PROMISES RESOLVED")
- }
- one.promise.then(success).then(success);
- two.promise.then(success);
- three.promise.then(success).then(success).then(success);
- $timeout(function () {
- one.resolve("one done");
- },Math.random() * 1000);
- $timeout(function () {
- two.resolve("two done");
- },Math.random() * 1000);
- $timeout(function () {
- three.resolve("three done");
- },Math.random() * 1000);
- });
在这个例子中,我为promise 1,2和3设置了一个$ q.all(),它将在随机的时间得到解决。然后我将promise添加到一和三的结尾。我想要所有的链解决后,所有的链解决。这里是我运行这段代码时的输出:
- one done
- one doneChained
- two done
- three done
- ALL PROMISES RESOLVED
- three doneChained
- three doneChainedChained
有没有办法等待链解决?
I want the all to resolve when all the chains have been resolved.
当然,然后只是通过每个链的承诺到all(),而不是初始的承诺:
- $q.all([one.promise,three.promise]).then(function() {
- console.log("ALL INITIAL PROMISES RESOLVED");
- });
- var onechain = one.promise.then(success).then(success),twochain = two.promise.then(success),threechain = three.promise.then(success).then(success).then(success);
- $q.all([onechain,twochain,threechain]).then(function() {
- console.log("ALL PROMISES RESOLVED");
- });