我有这段代码:
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"
之前打印?
我试图找到一个解决方案,但我无法找到原因。
提前致谢并抱歉我的英文!
答案 0 :(得分: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();
也许如果你有其他一些例子,我可以提供更多帮助。