正在更新async Promise.all中的外部对象/变量



更新Promise.all()中的值时,是否保证以下结果?我的理解是,内部功能将并行发生,但这将如何影响结果?

  • a将为6(0+1+2+3(
  • b的长度为8(长度为d*2(
    • 订单不保证
  • c的长度为3,除c['a']外,所有密钥/值对都得到保证
const networkCall = async () => {
// takes time
}
const update = async (i) => {
let a = 0;
let b = [];
let c = {};
const d = ['a', 'b', 'c', 'a'];

await Promise.all(d.map(async (i, index) => {
await networkCall();
a += index;
b.push(i);
b = [i, ...b]
c[i] = index;
});
console.log(a);
console.log(b);
console.log(c);
}
update()

我仔细研究了类似的问题,但没有找到令人满意的答案。

Promise.all()中更新值时。。。

Promise.all与更新abc的值无关。Promise.all将只接受一系列承诺并创建一个新的承诺。就是这样。在任何异步代码执行之前,都会返回新的promise。它不会影响某些回调函数进行更新的方式。Promise.all返回的promise在这里用于确保只有在所有异步代码都已执行时才进行console.log调用。

我的理解是,内部功能将并行发生,

"平行的";可能有不同的含义。。。并不是说每一句话都可以单独与另一句话进行循环。在这种特殊情况下,可以保证对于给定indexawait下面的四条语句作为一个不间断的块执行,而不运行任何其他JavaScript。只有当该块完成(并且回调返回(时,才有可能为该块的另一个执行上下文(具有不同的index变量和值(执行相同的块。

a将是6(0+1+2+3(

是的,在执行console.log(a)时可以保证这一点,即使它可能被计算为1+0+3+2。

b的长度为8(d * 2的长度(--订单不能保证

是。顺序是不保证的,但是数组被保证是"有序"的;回文":b[i] === b.at(-i-1)

c的长度为3,除c['a']外,所有密钥/值对都得到保证

是。

相关内容

  • 没有找到相关文章

最新更新