gpt4 book ai didi

angularjs - 作为一个团体和单独的 Angular 等待多个 promise ?

转载 作者:行者123 更新时间:2023-12-03 07:05:55 24 4
gpt4 key购买 nike

我正在使用 Restangular 对服务器进行多个同时调用。 Restangular 为每个操作返回 Promise,每个操作都需要根据其特定的返回值执行某些操作,一旦所有 3 个操作都完成且它们的 .then 函数已完成,我需要执行另一个函数。

在这种情况下,这是执行 promise 的正确方法吗?

var a, b, c;

a = service1.getList(...).then(function A(data) { do something; $log.debug('a'); return 'a';});
b = service2.getList(...).then(function B(data) { do something; $log.debug('b'); return 'b';});
c = service3.getList(...).then(function C(data) { do something; $log.debug('c'); return 'c';});

$q.all([a,b,c]).then(function wrapUp(values) { $log.debug(values); do something after functions A, B,and C above have finished;}

我不知道 $q.all() 是否会在 A、B 和 C 的最后运行,或者它是否可以在最后一个函数前面运行。 wrapUp() 总是最后调用吗?

注意 A、B 和 C 是 Promise a、b 和 c 完成后调用的函数。

传递给wrapUp的值数组似乎是A、B和C的返回值。但是,在我的控制台中,函数A记录10次,然后函数B记录10次,然后函数C和函数wrapUp是两者都记录 10 次(交替)。

10 倍日志记录似乎有些东西被破坏了......,并且令人担心的竞争条件似乎是一种可能性......

有人可以解释一下这是怎么回事吗?

Chrome Dev Console

最佳答案

Is this the right way to do promises in this instance?

是的,确实如此。

The 10x logging seems like something is broken....., and the feared race condition appears to be a possibility....

Can someone explain what is going on here?

实际上并没有坏掉。就像您建议的 $q.all 等待所有 promise 完成。

在:

 $q.all([a,b,c,d]).then(function(){
// yes, this only runs after all of the promises fulfilled
});

发生的情况是这样的:

您有一个运行 10 次的循环:

  • 整个循环中的调用都会立即完成。
  • 整个循环中的 B 调用都会立即完成。
  • C 调用解析
    • promise 由 a、b、c 实例的 $q.all 组成,其中 a(已解决)、b(已解决)和现在 c - 已实现。<
  • 下一个 c 调用解析
    • promise 由 a、b、c 实例的 $q.all 组成,其中 a(已解决)、b(已解决)和现在 c - 已实现。<

等等。

您拥有的唯一保证是,在循环内 $q.all([a,b,c]实例将在其本地之后实现 a、b 和 c。没有别的,仅此而已。

如果您想 Hook 所有返回值的聚合 promise ,您当然可以对所有 10 个返回值执行 $q.all

关于angularjs - 作为一个团体和单独的 Angular 等待多个 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22705704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com