等待分配给变量的承诺

Awaiting promises which is assigned to a variable

考虑下面的代码,

// Function which returns a promise and resolves in 2 seconds
const promiseFunction = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('resolved');
    }, 2000);
  });
};

// Asynchronous function 1
const asyncFunction1 = async() => {
    console.log(await promiseFunction());
    console.log(await promiseFunction());
    console.log(await promiseFunction());
}

// Asynchronous function 2
const asyncFunction2 = async() => {
    let a = promiseFunction();
    let b = promiseFunction();
    let c = promiseFunction();

    console.log(await a);
    console.log(await b);
    console.log(await c);
}

我正在尝试了解 asyncFunction1 和 asyncFunction2 执行之间的行为, asyncFunction1 在未分配给变量时每次等待(总共 6 次)需要 2 秒,但 asyncFunction2 当分配给一个变量时,在总共 2 秒内解决了所有 3 个承诺,这里发生了什么 分配给一个变量? (我们仍然对变量使用 await)。

计时器在您调用 promiseFunction() 时启动,因此当您 await a 时,所有三个计时器都已 运行。然后当a在2秒后完成时,其他的也已经完成了。

对于

asyncFunction1

  1. 他们将在 one.That 之后启动函数,这意味着第二个函数要等到第一个函数结束。
  2. 因为你直接在await上调用函数

asyncFunction2

  1. 对于这种情况,它将同时启动所有功能。因此该功能是在立即调用时触发的。以便立即启动计时器
  2. 这就是所有函数同时执行的原因

检查我下面的控制台。你可以看到不同的

const promiseFunction = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('resolved');
    }, 2000);
  });
};

// Asynchronous function 1
const asyncFunction1 = async() => {
    console.log(await promiseFunction(),1);
    console.log(await promiseFunction(),1);
    console.log(await promiseFunction(),1);
}

// Asynchronous function 2
const asyncFunction2 = async() => {
    let a = promiseFunction();
    let b = promiseFunction();
    let c = promiseFunction();

    console.log(await a,2);
    console.log(await b,2);
    console.log(await c,2);
}
asyncFunction1();
asyncFunction2();

Promise构造函数中传入的回调函数在创建promise时开始执行(这是Observable的主要区别和承诺)。请看第一个代码。

// Asynchronous function 1
const asyncFunction1 = async() => {
    console.log(await promiseFunction());
    console.log(await promiseFunction());
    console.log(await promiseFunction());
}

此函数每个函数等待 2 分钟,因此需要 6 秒。而第二个函数的工作方式不同。

// Asynchronous function 2
const asyncFunction2 = async() => {
    let a = promiseFunction();
    let b = promiseFunction();
    let c = promiseFunction();

    console.log(await a);
    console.log(await b);
    console.log(await c);
}

同时执行3个回调函数。它的工作原理与 await Promise.all() 完全相同。因此 asyncFunction2 将在大约 2 秒内解决。