Предложу решение "в лоб"...
<!DOCTYPE html>
<html>
<head>
<!--
<script src='https://code.jquery.com/jquery-latest.min.js'></script>
-->
<style type='text/css'>
</style>
<script>
function one(callback) {
setTimeout( function() {
callback("First");
}, Math.random() * 2000);
}
function two(callback) {
setTimeout( function() {
callback("Second");
}, Math.random() * 2000);
}
function three(callback) {
setTimeout( function() {
callback("Third");
}, Math.random() * 2000);
}
function runCallback(s) {
const o = document.createElement('p')
o.textContent = s
document.querySelector('body').appendChild(o)
}
// Вот собственно решение...
const test1 = res => {
runCallback(res)
three(runCallback)
}
const test2 = res => {
runCallback(res)
two(test1)
}
one(test2)
</script>
</head>
<body>
</body>
</html>