Promesas JavaScript y setTimeout

He estado jugando con Promises, pero tengo problemas para entender lo que está sucediendo con el siguiente código:

function a() { return new Promise(function (resolve, reject) { resolve("hi from a!"); }); } function b() { return new Promise(function (resolve, reject) { setTimeout(function () { resolve("hi from b!"); }, 5000); }); } function c() { return new Promise(function (resolve, reject) { setTimeout(function () { resolve("hi from c!"); }, 1000); }); } a().then(function (resultFromA) { console.log("a() responded with: " + resultFromA); b(); }).then(function (resultFromB) { console.log("b() responded with: " + resultFromB); c(); }).then(function (resultFromC) { console.log("c() responded with: " + resultFromC); });

Estoy esperando que esto salgaa() responded with: hi from a! inmediatamente, junto conb() responded with: hi from b! yc() responded with: hi from c! después de sus respectivossetTimeout() incendios Sin embargo, lo que obtengo es el siguiente resultado de inmediato:

a () respondió con: hola desde a!

b () respondió con: indefinido

c () respondió con: indefinido

Estaba pensando eso.then() espera estas promesas, pero no lo es. Cualquier ayuda sería apreciada.

Respuestas a la pregunta(3)

Su respuesta a la pregunta