Angularjs $q 运行 序列

Angularjs $q run in sequences

angularjs 和一些承诺有问题。出于某种原因,我的服务混合了查询的答案,虽然服务是固定的,但我需要将我的 $q.all() 更改为而不是 运行 异步所有承诺,运行 然后按顺序.

现在,它看起来像这样:

var promises = [p1, p2, p3];

$q.all(promises).then(function () {
    // All promises are done
}).catch(function (exception) {
    // An error occured.
});

预期的行为应该像 p1.then(p2).then(p3);,顺序无关紧要(因为通常 运行 异步)。数组长度可变。

由于 $q 受到 Q 库的启发,我查看了 Q 文档并发现 a sequence reference 但无法与 $q 一起使用。

任何人都可以为此类问题推荐一个简单的解决方案吗?

我试过这个 promises.reduce($q.when, $q(initialVal)); 但不明白 initialVal 指的是什么 :(

感谢阅读,祝您有愉快的一天。

如果您已经有承诺,那么异步方法已经被触发!您必须一个接一个地触发它们,因此您的数组需要包含 return promises 而不是 promise 对象的函数。

然后你可以这样做,这对我来说比你在问题中提供的 Q 的快捷方式更清楚:

var promiseReturningFunctions = [p1, p2, p3];
var queueEntryPoint = $q.defer();
// create a waiting queue
var queue = queueEntryPoint.promise;
// this queues up the asynchronous functions
promiseReturningFunctions.forEach(function (p) {
    queue = queue.then(p);
});
// here we start processing the queue by resolving our queueEntryPoint
queueEntryPoint.resolve();
// we can now use queue.then(...) to do something after all promises in queue were resolved
queue.then(function () {
    // All promises are done
}).catch(function (exception) {
    // An error occured.
});