2017-08-08 81 views
0

我有这样的代码:

function first() { 
    let promises = two(arg); 
    $q.all(promises).then(() => { 
     console.log("all promises"); 
    }); 
} 

function two(arg) { 
    let promises = []; 
    arg.forEach((ar) => { 
     let promise = funcThatReturnPromise(ar).then(() => { 
      console.log("single promise"); 
     }); 
     promises.push(promise); 
    }); 
    return promises; 
} 

我想,所有的"single promise"的将"all promises"但实际上之前打印"all promises""single promise"之前打印。

我该如何强制将所有"single promise"打印在"all promises"之前?

我试图找到一个解决方案,但我找不到原因。

在此先感谢和抱歉我的英语!

回答

1

我刚刚测试了您的代码,似乎无法复制您的问题。每个"single promise"将在最终的"all promises"之前打印出来,应该是预期的行为。 如果其中一个承诺被拒绝,$ q.all的then分支将不会运行。 我的测试代码是:

const fakePromise =() => { 
    var deferred = this.$q.defer(); 
    this.$timeout(() => { 
     deferred.resolve(); 
    }, Math.random() * 100); 
    return deferred.promise; 
} 

const two = (arg) => { 
    let promises = []; 
    arg.forEach((ar) => { 
     let promise = fakePromise().then(() => { 
      console.log("single promise"); 
     }); 
     promises.push(promise); 
    }); 
    return promises; 
} 
const first =() => { 
    let promises = two(Array(2000).fill('x')); 
    this.$q.all(promises).then(() => { 
     console.log("all promises"); 
    }); 
}; 

first(); 

也许如果你有一些其他的例子,我可以帮助更多。