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');
promises.js