What Order Does This Execute In?

setTimeout(() => {
    console.log('inside timeout');
}, 0);

process.nextTick(() => {
    console.log('inside nextTick');
});

const p = new Promise(function(resolve, reject) {
    console.log('inside promise');

    resolve();
})
    .then(() => console.log('inside then'));

console.log('after promise');