En el siguiente código, las variables c y c2 esperan diferentes instancias de promesa y deben ejecutarse en serie, pero cuando se ejecuta, el programa se completa en 100 milisegundos en lugar de 200.
function a1() { return new Promise((x, y) => { setTimeout(function () { x(5); }, 100); }); } async function run() { let t1 = Date.now(); let b = a1(); let b2 = a1(); let c = await b; let c2 = await b2; console.log(Date.now() - t1); } run().then(function () { console.log('@'); });¿Por qué es legal este comportamiento si await se define como una operación en serie?
Está llamando a a1() tanto para b como para b2 cuando los declara. Por lo tanto, en el momento en que espera, los tiempos de espera ya se han ejecutado y cada uno tiene una promesa, la espera solo resuelve esas promesas.
Si desea ver el retraso completo, debe asignar a1 a sus variables b y luego esperar las llamadas al declarar c , o simplemente esperar a1() dos veces.
let b = a1; let b2 = a1; let c = await b(); let c2 = await b2(); function a1() { return new Promise((x, y) => { setTimeout(function () { x(5); }, 100); }); } async function run() { let t1 = Date.now(); let b = await a1(); let b2 = await a1(); console.log(Date.now() - t1); } run().then(function () { console.log('@'); });