J'ai déjà parcouru le fil toute différence entre l'attente de promesses.All () et multiple attendre? , alors je suis clair sur la promesse.Tous et plusieurs attendre.
Néanmoins, je ne suis pas très clair sur les 2 scénarios ci-dessous.
Dans le cas 1, pourquoi exécute-t-il séquentiellement (prend 10s) alors que dans le cas où il s'exécute en parallèle (prend 4s)?
Cas 1:
function promiseWait(time) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(true);
}, time);
});
}
async function test1() {
var t0 = performance.now()
var a = await promiseWait(1000)
var b = await promiseWait(2000)
var c = await promiseWait(3000)
var d = await promiseWait(4000)
var t1 = performance.now()
console.log("Call to doSomething took " + (t1 - t0) + " milliseconds."); //takes 10secs
}
test1()
Cas 2:
function promiseWait(time) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(true);
}, time);
});
}
async function test2() {
var t0 = performance.now()
const p1 = promiseWait(1000);
const p2 = promiseWait(2000);
const p3 = promiseWait(3000);
const p4 = promiseWait(4000);
const a = await p1;
const b = await p2;
const c = await p3;
const d = await p4;
var t1 = performance.now()
console.log("Call to doSomething took " + (t1 - t0) + " milliseconds.")
}
test2()
Avec une plongée plus profonde ... (inspirée par Philip Roberts).
Cas 1: Settimeout déclenche un par un
function promiseWait(time) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(new Date().toISOString().split('.')[0].replace('T',' '));
}, time);
});
}
async function test1() {
let timeStamp = new Date();
var t0 = new Date();
console.log("t0",t0)
var a = await promiseWait(1000)
console.log("a",a)
var b = await promiseWait(2000)
console.log("b",b)
var c = await promiseWait(3000)
console.log("c",c)
var d = await promiseWait(4000)
console.log("d",d)
var t1 = new Date();
console.log("t1",t1)
console.log("Call to doSomething took " + (t1 - t0) + " milliseconds."); //takes 10secs
}
test1()
Console: Vous pouvez remarquer que la somme de chaque délai d'attente est entraînée à environ 10 secondes.
Cas 2: Les déclencheurs de Settimeout en même temps.
function promiseWait(time) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(new Date().toISOString().split('.')[0].replace('T',' '));
}, time);
});
}
async function test1() {
let timeStamp = new Date();
var t0 = new Date();
console.log("t0",t0)
const p1 = promiseWait(1000);
const p2 = promiseWait(2000);
const p3 = promiseWait(3000);
const p4 = promiseWait(4000);
console.log("p1",p1);
console.log("p2",p2);
console.log("p3",p3);
console.log("p4",p4);
const a = await p1;
console.log("a",a);
const b = await p2;
console.log("b",b);
const c = await p3;
console.log("c",c);
const d = await p4;
console.log("d",d);
var t1 = new Date();
console.log("t1",t1)
console.log("Call to doSomething took " + (t1 - t0) + " milliseconds."); //takes 10secs
}
test1()
Console: Ici, nous pouvons noter que la minuterie a commencé ensemble, ce qui a entraîné environ 4 secondes. (La dernière minuterie est définie à 4 secondes).