【发布时间】:2017-04-23 09:25:34
【问题描述】:
遇到了 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 lib 的启发,我查看了 Q 文档并找到了 a sequence reference,但无法使其与 $q 一起使用。
任何人都可以为此类问题推荐一个简单的解决方案吗?
我确实试过这个promises.reduce($q.when, $q(initialVal));,但不明白initialVal指的是什么:(
感谢您的阅读,祝您有愉快的一天。
【问题讨论】:
-
需要触发这些异步请求。因此,首先将这些功能分组并按优先级排序。接下来,连接每个 resolve 以触发下一个函数。我只会创建您自己的服务来执行此操作。
-
是的,我的第一个想法是使用递归函数来触发第一个函数,然后弹出数组并在成功后再次调用。不是很多编码,但不是真正的 js 风格,我很害怕。如果我没有答案,我会自己做一些事情并在这里发布(添加在 $q 原型中以便于重复使用)
-
initialValue是数组中第一个异步函数的输入,除了,我认为你不需要$q -
见鬼,抱歉重复...不知道为什么我找不到它:(
标签: javascript angularjs angular-promise