I am reading the article about nodejs promise here.
Then I try running the following sample code (from the article)
const p = Promise.resolve();
(asyn
This is due to this change in the specs which now allows shortcircuiting await promiseInstance
to not wrap promiseInstance
into a new Promise internally and hence saving two ticks (one for waiting for promiseInstance
and one to wake up the async function).
Here is a detailed article from the authors of the specs' patch, which also occur to be v8 devs. In there, they explain how that behavior was actually already in nodejs v.8 but was against the specs by then, i.e a bug, that they fixed in v.10, before this patch makes it the official way of doing, and it gets implemented in v8 engine directly.
So if you wish the inlined version that should have happened before this patch is
const p = Promise.resolve();
new Promise((res) => p.then(res)) // wait for p to resolve
.then((res) => Promise.resolve(res)) // wake up the function
.then((res) => console.log('after:await'));
p.then(() => console.log('tick:a'))
.then(() => console.log('tick:b'));
while the patch makes it
const p = Promise.resolve();
p.then(() => console.log('after:await'));
p.then(() => console.log('tick:a'))
.then(() => console.log('tick:b'));