等待分配给变量的承诺
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
- 他们将在 one.That 之后启动函数,这意味着第二个函数要等到第一个函数结束。
- 因为你直接在await上调用函数
asyncFunction2
- 对于这种情况,它将同时启动所有功能。因此该功能是在立即调用时触发的。以便立即启动计时器
- 这就是所有函数同时执行的原因
检查我下面的控制台。你可以看到不同的
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 秒内解决。
考虑下面的代码,
// 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
- 他们将在 one.That 之后启动函数,这意味着第二个函数要等到第一个函数结束。
- 因为你直接在await上调用函数
asyncFunction2
- 对于这种情况,它将同时启动所有功能。因此该功能是在立即调用时触发的。以便立即启动计时器
- 这就是所有函数同时执行的原因
检查我下面的控制台。你可以看到不同的
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 秒内解决。